ods-ant 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (160) hide show
  1. package/README.md +62 -0
  2. package/dist-lib/index.cjs +5665 -0
  3. package/dist-lib/index.cjs.map +1 -0
  4. package/dist-lib/index.js +7433 -0
  5. package/dist-lib/index.js.map +1 -0
  6. package/dist-lib/theme.cjs +2 -0
  7. package/dist-lib/theme.cjs.map +1 -0
  8. package/dist-lib/theme.js +611 -0
  9. package/dist-lib/theme.js.map +1 -0
  10. package/dist-lib/types/ds/display/Collapse.d.ts +32 -0
  11. package/dist-lib/types/ds/display/Collapse.d.ts.map +1 -0
  12. package/dist-lib/types/ds/display/Popover.d.ts +12 -0
  13. package/dist-lib/types/ds/display/Popover.d.ts.map +1 -0
  14. package/dist-lib/types/ds/display/Segmented.d.ts +8 -0
  15. package/dist-lib/types/ds/display/Segmented.d.ts.map +1 -0
  16. package/dist-lib/types/ds/display/Table.d.ts +81 -0
  17. package/dist-lib/types/ds/display/Table.d.ts.map +1 -0
  18. package/dist-lib/types/ds/display/Tag.d.ts +37 -0
  19. package/dist-lib/types/ds/display/Tag.d.ts.map +1 -0
  20. package/dist-lib/types/ds/display/Tooltip.d.ts +12 -0
  21. package/dist-lib/types/ds/display/Tooltip.d.ts.map +1 -0
  22. package/dist-lib/types/ds/display/index.d.ts +7 -0
  23. package/dist-lib/types/ds/display/index.d.ts.map +1 -0
  24. package/dist-lib/types/ds/feedback/FloatButton.d.ts +12 -0
  25. package/dist-lib/types/ds/feedback/FloatButton.d.ts.map +1 -0
  26. package/dist-lib/types/ds/feedback/Message.d.ts +15 -0
  27. package/dist-lib/types/ds/feedback/Message.d.ts.map +1 -0
  28. package/dist-lib/types/ds/feedback/Modal.d.ts +30 -0
  29. package/dist-lib/types/ds/feedback/Modal.d.ts.map +1 -0
  30. package/dist-lib/types/ds/feedback/Notification.d.ts +11 -0
  31. package/dist-lib/types/ds/feedback/Notification.d.ts.map +1 -0
  32. package/dist-lib/types/ds/feedback/Popconfirm.d.ts +4 -0
  33. package/dist-lib/types/ds/feedback/Popconfirm.d.ts.map +1 -0
  34. package/dist-lib/types/ds/feedback/Spin.d.ts +6 -0
  35. package/dist-lib/types/ds/feedback/Spin.d.ts.map +1 -0
  36. package/dist-lib/types/ds/feedback/feedbackIcons.d.ts +13 -0
  37. package/dist-lib/types/ds/feedback/feedbackIcons.d.ts.map +1 -0
  38. package/dist-lib/types/ds/feedback/index.d.ts +7 -0
  39. package/dist-lib/types/ds/feedback/index.d.ts.map +1 -0
  40. package/dist-lib/types/ds/forms/AccessibleCheckboxGroup.d.ts +14 -0
  41. package/dist-lib/types/ds/forms/AccessibleCheckboxGroup.d.ts.map +1 -0
  42. package/dist-lib/types/ds/forms/AccessibleDatePicker.d.ts +15 -0
  43. package/dist-lib/types/ds/forms/AccessibleDatePicker.d.ts.map +1 -0
  44. package/dist-lib/types/ds/forms/AccessiblePasswordInput.d.ts +18 -0
  45. package/dist-lib/types/ds/forms/AccessiblePasswordInput.d.ts.map +1 -0
  46. package/dist-lib/types/ds/forms/AccessibleRadioGroup.d.ts +14 -0
  47. package/dist-lib/types/ds/forms/AccessibleRadioGroup.d.ts.map +1 -0
  48. package/dist-lib/types/ds/forms/AccessibleSelect.d.ts +14 -0
  49. package/dist-lib/types/ds/forms/AccessibleSelect.d.ts.map +1 -0
  50. package/dist-lib/types/ds/forms/AccessibleSwitch.d.ts +13 -0
  51. package/dist-lib/types/ds/forms/AccessibleSwitch.d.ts.map +1 -0
  52. package/dist-lib/types/ds/forms/AutoComplete.d.ts +8 -0
  53. package/dist-lib/types/ds/forms/AutoComplete.d.ts.map +1 -0
  54. package/dist-lib/types/ds/forms/Button.d.ts +30 -0
  55. package/dist-lib/types/ds/forms/Button.d.ts.map +1 -0
  56. package/dist-lib/types/ds/forms/Cascader.d.ts +7 -0
  57. package/dist-lib/types/ds/forms/Cascader.d.ts.map +1 -0
  58. package/dist-lib/types/ds/forms/Checkbox.d.ts +13 -0
  59. package/dist-lib/types/ds/forms/Checkbox.d.ts.map +1 -0
  60. package/dist-lib/types/ds/forms/ClearableAutoComplete.d.ts +19 -0
  61. package/dist-lib/types/ds/forms/ClearableAutoComplete.d.ts.map +1 -0
  62. package/dist-lib/types/ds/forms/ClearableCascader.d.ts +20 -0
  63. package/dist-lib/types/ds/forms/ClearableCascader.d.ts.map +1 -0
  64. package/dist-lib/types/ds/forms/ClearableCheckbox.d.ts +19 -0
  65. package/dist-lib/types/ds/forms/ClearableCheckbox.d.ts.map +1 -0
  66. package/dist-lib/types/ds/forms/ClearableColorPicker.d.ts +21 -0
  67. package/dist-lib/types/ds/forms/ClearableColorPicker.d.ts.map +1 -0
  68. package/dist-lib/types/ds/forms/ClearableDatePicker.d.ts +20 -0
  69. package/dist-lib/types/ds/forms/ClearableDatePicker.d.ts.map +1 -0
  70. package/dist-lib/types/ds/forms/ClearableInput.d.ts +19 -0
  71. package/dist-lib/types/ds/forms/ClearableInput.d.ts.map +1 -0
  72. package/dist-lib/types/ds/forms/ClearableInputNumber.d.ts +20 -0
  73. package/dist-lib/types/ds/forms/ClearableInputNumber.d.ts.map +1 -0
  74. package/dist-lib/types/ds/forms/ClearableMentions.d.ts +19 -0
  75. package/dist-lib/types/ds/forms/ClearableMentions.d.ts.map +1 -0
  76. package/dist-lib/types/ds/forms/ClearableRadio.d.ts +19 -0
  77. package/dist-lib/types/ds/forms/ClearableRadio.d.ts.map +1 -0
  78. package/dist-lib/types/ds/forms/ClearableRadioGroup.d.ts +20 -0
  79. package/dist-lib/types/ds/forms/ClearableRadioGroup.d.ts.map +1 -0
  80. package/dist-lib/types/ds/forms/ClearableRate.d.ts +20 -0
  81. package/dist-lib/types/ds/forms/ClearableRate.d.ts.map +1 -0
  82. package/dist-lib/types/ds/forms/ClearableSelect.d.ts +20 -0
  83. package/dist-lib/types/ds/forms/ClearableSelect.d.ts.map +1 -0
  84. package/dist-lib/types/ds/forms/ClearableSlider.d.ts +21 -0
  85. package/dist-lib/types/ds/forms/ClearableSlider.d.ts.map +1 -0
  86. package/dist-lib/types/ds/forms/ClearableSwitch.d.ts +20 -0
  87. package/dist-lib/types/ds/forms/ClearableSwitch.d.ts.map +1 -0
  88. package/dist-lib/types/ds/forms/ClearableTimePicker.d.ts +21 -0
  89. package/dist-lib/types/ds/forms/ClearableTimePicker.d.ts.map +1 -0
  90. package/dist-lib/types/ds/forms/ClearableTransfer.d.ts +21 -0
  91. package/dist-lib/types/ds/forms/ClearableTransfer.d.ts.map +1 -0
  92. package/dist-lib/types/ds/forms/ClearableTreeSelect.d.ts +20 -0
  93. package/dist-lib/types/ds/forms/ClearableTreeSelect.d.ts.map +1 -0
  94. package/dist-lib/types/ds/forms/ClearableUpload.d.ts +21 -0
  95. package/dist-lib/types/ds/forms/ClearableUpload.d.ts.map +1 -0
  96. package/dist-lib/types/ds/forms/DatePicker.d.ts +8 -0
  97. package/dist-lib/types/ds/forms/DatePicker.d.ts.map +1 -0
  98. package/dist-lib/types/ds/forms/FieldSetShell.d.ts +18 -0
  99. package/dist-lib/types/ds/forms/FieldSetShell.d.ts.map +1 -0
  100. package/dist-lib/types/ds/forms/FieldShell.d.ts +18 -0
  101. package/dist-lib/types/ds/forms/FieldShell.d.ts.map +1 -0
  102. package/dist-lib/types/ds/forms/FormError.d.ts +14 -0
  103. package/dist-lib/types/ds/forms/FormError.d.ts.map +1 -0
  104. package/dist-lib/types/ds/forms/FormSuccess.d.ts +11 -0
  105. package/dist-lib/types/ds/forms/FormSuccess.d.ts.map +1 -0
  106. package/dist-lib/types/ds/forms/FormWarning.d.ts +11 -0
  107. package/dist-lib/types/ds/forms/FormWarning.d.ts.map +1 -0
  108. package/dist-lib/types/ds/forms/Input.d.ts +7 -0
  109. package/dist-lib/types/ds/forms/Input.d.ts.map +1 -0
  110. package/dist-lib/types/ds/forms/Select.d.ts +11 -0
  111. package/dist-lib/types/ds/forms/Select.d.ts.map +1 -0
  112. package/dist-lib/types/ds/forms/Switch.d.ts +22 -0
  113. package/dist-lib/types/ds/forms/Switch.d.ts.map +1 -0
  114. package/dist-lib/types/ds/forms/TimePicker.d.ts +15 -0
  115. package/dist-lib/types/ds/forms/TimePicker.d.ts.map +1 -0
  116. package/dist-lib/types/ds/forms/autoCompleteStyles.d.ts +5 -0
  117. package/dist-lib/types/ds/forms/autoCompleteStyles.d.ts.map +1 -0
  118. package/dist-lib/types/ds/forms/clearUtils.d.ts +11 -0
  119. package/dist-lib/types/ds/forms/clearUtils.d.ts.map +1 -0
  120. package/dist-lib/types/ds/forms/datePickerStyles.d.ts +5 -0
  121. package/dist-lib/types/ds/forms/datePickerStyles.d.ts.map +1 -0
  122. package/dist-lib/types/ds/forms/index.d.ts +41 -0
  123. package/dist-lib/types/ds/forms/index.d.ts.map +1 -0
  124. package/dist-lib/types/ds/forms/inputNumberStyles.d.ts +2 -0
  125. package/dist-lib/types/ds/forms/inputNumberStyles.d.ts.map +1 -0
  126. package/dist-lib/types/ds/forms/selectStyles.d.ts +10 -0
  127. package/dist-lib/types/ds/forms/selectStyles.d.ts.map +1 -0
  128. package/dist-lib/types/ds/forms/timePickerStyles.d.ts +5 -0
  129. package/dist-lib/types/ds/forms/timePickerStyles.d.ts.map +1 -0
  130. package/dist-lib/types/ds/forms/validation.d.ts +33 -0
  131. package/dist-lib/types/ds/forms/validation.d.ts.map +1 -0
  132. package/dist-lib/types/ds/index.d.ts +5 -0
  133. package/dist-lib/types/ds/index.d.ts.map +1 -0
  134. package/dist-lib/types/ds/navigation/Anchor.d.ts +7 -0
  135. package/dist-lib/types/ds/navigation/Anchor.d.ts.map +1 -0
  136. package/dist-lib/types/ds/navigation/Breadcrumb.d.ts +19 -0
  137. package/dist-lib/types/ds/navigation/Breadcrumb.d.ts.map +1 -0
  138. package/dist-lib/types/ds/navigation/Pagination.d.ts +38 -0
  139. package/dist-lib/types/ds/navigation/Pagination.d.ts.map +1 -0
  140. package/dist-lib/types/ds/navigation/Steps.d.ts +11 -0
  141. package/dist-lib/types/ds/navigation/Steps.d.ts.map +1 -0
  142. package/dist-lib/types/ds/navigation/Tabs.d.ts +13 -0
  143. package/dist-lib/types/ds/navigation/Tabs.d.ts.map +1 -0
  144. package/dist-lib/types/ds/navigation/index.d.ts +6 -0
  145. package/dist-lib/types/ds/navigation/index.d.ts.map +1 -0
  146. package/dist-lib/types/ds/navigation/stepsStyles.d.ts +4 -0
  147. package/dist-lib/types/ds/navigation/stepsStyles.d.ts.map +1 -0
  148. package/dist-lib/types/theme/ontadaTheme.d.ts +595 -0
  149. package/dist-lib/types/theme/ontadaTheme.d.ts.map +1 -0
  150. package/dist-lib/types/utils/iconAdapters.d.ts +59 -0
  151. package/dist-lib/types/utils/iconAdapters.d.ts.map +1 -0
  152. package/dist-lib/types/utils/iconMapping.d.ts +14 -0
  153. package/dist-lib/types/utils/iconMapping.d.ts.map +1 -0
  154. package/dist-lib/types/utils/icons.d.ts +6 -0
  155. package/dist-lib/types/utils/icons.d.ts.map +1 -0
  156. package/dist-lib/types/utils/index.d.ts +5 -0
  157. package/dist-lib/types/utils/index.d.ts.map +1 -0
  158. package/dist-lib/types/utils/useCustomIcon.d.ts +63 -0
  159. package/dist-lib/types/utils/useCustomIcon.d.ts.map +1 -0
  160. package/package.json +108 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../src/ds/forms/Button.tsx","../src/utils/iconMapping.ts","../src/utils/useCustomIcon.tsx","../src/ds/forms/selectStyles.ts","../src/ds/forms/Select.tsx","../src/ds/forms/datePickerStyles.ts","../src/ds/forms/DatePicker.tsx","../src/ds/forms/timePickerStyles.ts","../src/ds/forms/TimePicker.tsx","../src/ds/forms/Input.tsx","../src/ds/forms/Checkbox.tsx","../src/ds/forms/Switch.tsx","../src/ds/forms/clearUtils.ts","../src/ds/forms/FieldShell.tsx","../src/ds/forms/FieldSetShell.tsx","../src/ds/forms/AccessiblePasswordInput.tsx","../src/ds/forms/AccessibleCheckboxGroup.tsx","../src/ds/forms/AccessibleRadioGroup.tsx","../src/ds/forms/AccessibleSwitch.tsx","../src/ds/forms/AccessibleSelect.tsx","../src/ds/forms/AccessibleDatePicker.tsx","../src/ds/forms/FormError.tsx","../src/ds/forms/FormSuccess.tsx","../src/ds/forms/FormWarning.tsx","../src/ds/forms/validation.ts","../src/ds/forms/ClearableInput.tsx","../src/ds/forms/ClearableSelect.tsx","../src/ds/forms/ClearableDatePicker.tsx","../src/ds/forms/ClearableInputNumber.tsx","../src/ds/forms/ClearableTimePicker.tsx","../src/ds/forms/ClearableTreeSelect.tsx","../src/ds/forms/Cascader.tsx","../src/ds/forms/ClearableCascader.tsx","../src/ds/forms/autoCompleteStyles.ts","../src/ds/forms/AutoComplete.tsx","../src/ds/forms/ClearableAutoComplete.tsx","../src/ds/forms/ClearableMentions.tsx","../src/ds/forms/ClearableCheckbox.tsx","../src/ds/forms/ClearableRadio.tsx","../src/ds/forms/ClearableRadioGroup.tsx","../src/ds/forms/ClearableSwitch.tsx","../src/ds/forms/ClearableSlider.tsx","../src/ds/forms/ClearableRate.tsx","../src/ds/forms/ClearableColorPicker.tsx","../src/ds/forms/ClearableTransfer.tsx","../src/ds/forms/ClearableUpload.tsx","../src/ds/navigation/Breadcrumb.tsx","../src/ds/navigation/Anchor.tsx","../src/ds/navigation/Pagination.tsx","../src/ds/navigation/stepsStyles.ts","../src/ds/navigation/Steps.tsx","../src/ds/navigation/Tabs.tsx","../src/ds/display/Tag.tsx","../src/ds/display/Tooltip.tsx","../src/ds/display/Table.tsx","../src/ds/display/Popover.tsx","../src/ds/display/Collapse.tsx","../src/ds/display/Segmented.tsx","../src/ds/feedback/Modal.tsx","../src/ds/feedback/feedbackIcons.tsx","../src/ds/feedback/Message.tsx","../src/ds/feedback/Notification.tsx","../src/ds/feedback/Popconfirm.tsx","../src/ds/feedback/Spin.tsx","../src/ds/feedback/FloatButton.tsx"],"sourcesContent":["import { Button as AntButton } from 'antd';\nimport type { ButtonProps as AntButtonProps } from 'antd';\nimport { ConfigProvider } from 'antd';\nimport type { CSSProperties } from 'react';\nimport { useEffect } from 'react';\nimport { dsSemanticTokens } from '../../theme/ontadaTheme';\n\ntype DSButtonVariant = 'primary' | 'secondary' | 'tertiary' | 'tertiary-alt';\n\ntype RestrictedAntVisualProps = 'type' | 'variant' | 'color' | 'danger' | 'ghost';\n\nexport type ButtonProps = Omit<AntButtonProps, RestrictedAntVisualProps> & {\n /** Design system button variant matching Figma design */\n dsVariant?: DSButtonVariant;\n};\n\n// Unique ID for this component's style tag\nconst STYLE_ID = 'ds-button-styles';\n\n/**\n * DS Button wrapper that applies design system styling on top of Ant Design's Button.\n * Provides consistent visual appearance aligned with Figma design specifications.\n *\n * Variants:\n * - primary: Solid filled button (default)\n * - secondary: Outlined button\n * - tertiary: Text button\n * - tertiary-alt: Alternative text button\n *\n * @example\n * <Button>Primary</Button>\n * <Button dsVariant=\"secondary\">Secondary</Button>\n * <Button dsVariant=\"tertiary\">Tertiary</Button>\n * <Button disabled>Disabled</Button>\n */\nexport const Button = ({\n dsVariant = 'primary',\n disabled = false,\n style: userStyle = {},\n className: userClassName = '',\n ...props\n}: ButtonProps) => {\n // Ensure global styles are injected once\n useEffect(() => {\n if (typeof document !== 'undefined' && !document.getElementById(STYLE_ID)) {\n const style = document.createElement('style');\n style.id = STYLE_ID;\n const { button } = dsSemanticTokens;\n style.textContent = `\n :root {\n --ds-btn-primary: ${button.primary.default};\n --ds-btn-primary-hover: ${button.primary.hover};\n --ds-btn-primary-pressed: ${button.primary.pressed};\n --ds-btn-primary-text: ${button.primary.text};\n --ds-btn-primary-disabled-text: ${button.primary.disabledText};\n --ds-btn-primary-disabled-bg: ${button.primary.disabledBg};\n\n --ds-btn-secondary-text: ${button.secondary.defaultText};\n --ds-btn-secondary-border: ${button.secondary.defaultBorder};\n --ds-btn-secondary-bg: ${button.secondary.defaultBg};\n --ds-btn-secondary-hover-text: ${button.secondary.hoverText};\n --ds-btn-secondary-hover-border: ${button.secondary.hoverBorder};\n --ds-btn-secondary-hover-bg: ${button.secondary.hoverBg};\n --ds-btn-secondary-pressed-text: ${button.secondary.pressedText};\n --ds-btn-secondary-pressed-border: ${button.secondary.pressedBorder};\n --ds-btn-secondary-pressed-bg: ${button.secondary.pressedBg};\n --ds-btn-secondary-disabled-text: ${button.secondary.disabledText};\n --ds-btn-secondary-disabled-border: ${button.secondary.disabledBorder};\n --ds-btn-secondary-disabled-bg: ${button.secondary.disabledBg};\n\n --ds-btn-tertiary-text: ${button.tertiary.defaultText};\n --ds-btn-tertiary-hover-text: ${button.tertiary.hoverText};\n --ds-btn-tertiary-pressed-text: ${button.tertiary.pressedText};\n --ds-btn-tertiary-disabled-text: ${button.tertiary.disabledText};\n\n --ds-btn-tertiary-alt-text: ${button.tertiaryAlt.defaultText};\n --ds-btn-tertiary-alt-hover-text: ${button.tertiaryAlt.hoverText};\n --ds-btn-tertiary-alt-pressed-text: ${button.tertiaryAlt.pressedText};\n --ds-btn-tertiary-alt-disabled-text: ${button.tertiaryAlt.disabledText};\n\n --ds-btn-font-small-size: ${button.typography.small.fontSize};\n --ds-btn-font-small-line-height: ${button.typography.small.lineHeight};\n --ds-btn-font-small-letter-spacing: ${button.typography.small.letterSpacing};\n --ds-btn-font-middle-size: ${button.typography.middle.fontSize};\n --ds-btn-font-middle-line-height: ${button.typography.middle.lineHeight};\n --ds-btn-font-middle-letter-spacing: ${button.typography.middle.letterSpacing};\n --ds-btn-font-large-size: ${button.typography.large.fontSize};\n --ds-btn-font-large-line-height: ${button.typography.large.lineHeight};\n --ds-btn-font-large-letter-spacing: ${button.typography.large.letterSpacing};\n }\n\n [data-ds-variant].ant-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-weight: ${button.typography.fontWeight};\n text-transform: ${button.typography.textTransform};\n transition: none !important;\n animation: none !important;\n box-shadow: none !important;\n }\n\n [data-ds-variant].ant-btn:hover,\n [data-ds-variant].ant-btn:active,\n [data-ds-variant].ant-btn:focus,\n [data-ds-variant].ant-btn:focus-visible,\n [data-ds-variant].ant-btn.ant-btn-active {\n box-shadow: none !important;\n transition: none !important;\n animation: none !important;\n }\n\n [data-ds-variant].ant-btn::before,\n [data-ds-variant].ant-btn::after {\n transition: none !important;\n animation: none !important;\n box-shadow: none !important;\n }\n\n [data-ds-variant].ant-btn.ant-wave::after,\n [data-ds-variant].ant-btn .ant-wave::after {\n animation: none !important;\n opacity: 0 !important;\n }\n\n [data-ds-variant].ant-btn .ant-btn-icon {\n width: 16px;\n height: 16px;\n min-width: 16px;\n min-height: 16px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n color: inherit;\n line-height: 1;\n flex: 0 0 16px;\n }\n\n [data-ds-variant].ant-btn .ant-btn-icon > .anticon,\n [data-ds-variant].ant-btn .ant-btn-icon > svg,\n [data-ds-variant].ant-btn .ant-btn-icon > span > svg {\n width: 16px !important;\n height: 16px !important;\n font-size: 16px !important;\n line-height: 1;\n display: block;\n color: inherit;\n }\n\n [data-ds-variant].ant-btn .ant-btn-icon svg [fill]:not([fill=\"none\"]),\n [data-ds-variant].ant-btn .ant-btn-icon svg path:not([fill=\"none\"]) {\n fill: currentColor !important;\n }\n\n [data-ds-variant].ant-btn .ant-btn-icon svg [stroke]:not([stroke=\"none\"]) {\n stroke: currentColor !important;\n }\n\n /* Optical centering for uppercase labels */\n [data-ds-variant].ant-btn > span:not(.ant-btn-icon) {\n display: inline-flex;\n align-items: center;\n transform: translateY(-0.5px);\n }\n\n [data-ds-variant].ant-btn.ant-btn-sm {\n font-size: var(--ds-btn-font-small-size);\n line-height: var(--ds-btn-font-small-line-height);\n letter-spacing: var(--ds-btn-font-small-letter-spacing);\n }\n\n [data-ds-variant].ant-btn.ant-btn-lg {\n font-size: var(--ds-btn-font-large-size);\n line-height: var(--ds-btn-font-large-line-height);\n letter-spacing: var(--ds-btn-font-large-letter-spacing);\n }\n\n [data-ds-variant].ant-btn:not(.ant-btn-sm):not(.ant-btn-lg) {\n font-size: var(--ds-btn-font-middle-size);\n line-height: var(--ds-btn-font-middle-line-height);\n letter-spacing: var(--ds-btn-font-middle-letter-spacing);\n }\n\n /* Primary variant states */\n [data-ds-variant=\"primary\"].ant-btn,\n [data-ds-variant=\"primary\"].ant-btn.ant-btn-primary {\n background-color: var(--ds-btn-primary) !important;\n border-color: var(--ds-btn-primary) !important;\n color: var(--ds-btn-primary-text) !important;\n }\n\n [data-ds-variant=\"primary\"].ant-btn:hover,\n [data-ds-variant=\"primary\"].ant-btn.ant-btn-primary:hover {\n background-color: var(--ds-btn-primary-hover) !important;\n border-color: var(--ds-btn-primary-hover) !important;\n color: var(--ds-btn-primary-text) !important;\n }\n\n [data-ds-variant=\"primary\"].ant-btn:active,\n [data-ds-variant=\"primary\"].ant-btn.ant-btn-primary:active,\n [data-ds-variant=\"primary\"].ant-btn.ant-btn-primary.ant-btn-active {\n background-color: var(--ds-btn-primary-pressed) !important;\n border-color: var(--ds-btn-primary-pressed) !important;\n color: var(--ds-btn-primary-text) !important;\n }\n\n [data-ds-variant=\"primary\"].ant-btn:disabled,\n [data-ds-variant=\"primary\"].ant-btn.ant-btn-disabled {\n background-color: var(--ds-btn-primary-disabled-bg) !important;\n border-color: var(--ds-btn-primary-disabled-bg) !important;\n color: var(--ds-btn-primary-disabled-text) !important;\n }\n\n /* Secondary variant states */\n [data-ds-variant=\"secondary\"].ant-btn {\n border-color: var(--ds-btn-secondary-border) !important;\n color: var(--ds-btn-secondary-text) !important;\n background-color: var(--ds-btn-secondary-bg) !important;\n }\n \n [data-ds-variant=\"secondary\"].ant-btn:hover {\n border-color: var(--ds-btn-secondary-hover-border) !important;\n color: var(--ds-btn-secondary-hover-text) !important;\n background-color: var(--ds-btn-secondary-hover-bg) !important;\n }\n\n [data-ds-variant=\"secondary\"].ant-btn:active,\n [data-ds-variant=\"secondary\"].ant-btn.ant-btn-active {\n border-color: var(--ds-btn-secondary-pressed-border) !important;\n color: var(--ds-btn-secondary-pressed-text) !important;\n background-color: var(--ds-btn-secondary-pressed-bg) !important;\n }\n \n [data-ds-variant=\"secondary\"].ant-btn:disabled,\n [data-ds-variant=\"secondary\"].ant-btn.ant-btn-disabled {\n border-color: var(--ds-btn-secondary-disabled-border) !important;\n border-width: 2px !important;\n border-style: solid !important;\n color: var(--ds-btn-secondary-disabled-text) !important;\n background-color: var(--ds-btn-secondary-disabled-bg) !important;\n }\n \n /* Tertiary variant states */\n [data-ds-variant=\"tertiary\"].ant-btn {\n color: var(--ds-btn-tertiary-text) !important;\n border: none !important;\n background-color: transparent !important;\n }\n \n [data-ds-variant=\"tertiary\"].ant-btn:hover {\n color: var(--ds-btn-tertiary-hover-text) !important;\n background-color: transparent !important;\n }\n\n [data-ds-variant=\"tertiary\"].ant-btn:active,\n [data-ds-variant=\"tertiary\"].ant-btn.ant-btn-active {\n color: var(--ds-btn-tertiary-pressed-text) !important;\n background-color: transparent !important;\n }\n \n [data-ds-variant=\"tertiary\"].ant-btn:disabled,\n [data-ds-variant=\"tertiary\"].ant-btn.ant-btn-disabled {\n color: var(--ds-btn-tertiary-disabled-text) !important;\n background-color: transparent !important;\n }\n\n /* Tertiary-alt variant states */\n [data-ds-variant=\"tertiary-alt\"].ant-btn {\n color: var(--ds-btn-tertiary-alt-text) !important;\n border: none !important;\n background-color: transparent !important;\n }\n\n [data-ds-variant=\"tertiary-alt\"].ant-btn:hover {\n color: var(--ds-btn-tertiary-alt-hover-text) !important;\n background-color: transparent !important;\n }\n\n [data-ds-variant=\"tertiary-alt\"].ant-btn:active,\n [data-ds-variant=\"tertiary-alt\"].ant-btn.ant-btn-active {\n color: var(--ds-btn-tertiary-alt-pressed-text) !important;\n background-color: transparent !important;\n }\n\n [data-ds-variant=\"tertiary-alt\"].ant-btn:disabled,\n [data-ds-variant=\"tertiary-alt\"].ant-btn.ant-btn-disabled {\n color: var(--ds-btn-tertiary-alt-disabled-text) !important;\n background-color: transparent !important;\n }\n `;\n document.head.appendChild(style);\n }\n }, []);\n\n // Build inline styles based on variant\n const getStyles = (): CSSProperties => {\n const baseStyle: CSSProperties = {\n ...userStyle,\n boxShadow: 'none',\n transition: 'none',\n animation: 'none',\n WebkitTapHighlightColor: 'transparent',\n };\n\n return baseStyle;\n };\n\n // For secondary and tertiary, use different Ant Design types\n if (dsVariant === 'secondary') {\n return (\n <ConfigProvider wave={{ disabled: true }}>\n <AntButton\n type=\"default\"\n disabled={disabled}\n style={getStyles()}\n className={userClassName}\n data-ds-variant={dsVariant}\n {...props}\n />\n </ConfigProvider>\n );\n }\n\n if (dsVariant === 'tertiary' || dsVariant === 'tertiary-alt') {\n return (\n <ConfigProvider wave={{ disabled: true }}>\n <AntButton\n type=\"text\"\n disabled={disabled}\n style={getStyles()}\n className={userClassName}\n data-ds-variant={dsVariant}\n {...props}\n />\n </ConfigProvider>\n );\n }\n\n // Primary variant\n return (\n <ConfigProvider wave={{ disabled: true }}>\n <AntButton\n type=\"primary\"\n disabled={disabled}\n style={getStyles()}\n className={userClassName}\n data-ds-variant={dsVariant}\n {...props}\n />\n </ConfigProvider>\n );\n};\n\nButton.displayName = 'Button';\nButton.Group = AntButton.Group;\n","/**\n * Icon mapping for custom SVG icons\n * Maps user-friendly names to file paths in src/assets/icons/individual/\n */\n\nexport const CUSTOM_ICON_MAP: Record<string, string> = {\n // Callback & Messages\n callBackRequest: 'Call back request.svg',\n clipboard: 'Clipboard.svg',\n messages: 'Messages.svg',\n newMessage: 'New message.svg',\n\n // Navigation & Layout\n expandLeft: 'Expand 1.svg',\n externalCloseLeft: 'External Close-Left.svg',\n externalCloseRight: 'External Close-Right.svg',\n externalOpenLeft: 'External Open-Left.svg',\n externalOpenRight: 'External Open-Right.svg',\n filterAllDigital: 'Filter All-Digital.svg',\n filterDigital: 'Filter-Digital.svg',\n moreOptionHorizontal1: 'More Option - Horizontal 1.svg',\n moreOptionHorizontal2: 'More Option - Horizontal 2.svg',\n moreOptionVertical1: 'More Option - Vertical 1.svg',\n moreOptionVertical2: 'More Option - Vertical 2.svg',\n navigationMenuVertical: 'navigation-menu-vertical 1.svg',\n drawerOpen: 'drawer-open.svg',\n shrink: 'Shrink.svg',\n\n // Status & Progress\n inProgress: 'In Progress.svg',\n taskListUpload: 'Task-list-upload-1.svg',\n patientList: 'Patient List.svg',\n patient: 'Patient.svg',\n scheduling: 'Scheduling.svg',\n runningMan: 'Running man.svg',\n\n // Table Operations\n tableColumnReorderActive: 'Table Column Reorder - Active.svg',\n tableColumnReorderNormal: 'Table Column Reorder - Normal.svg',\n tableRowReorderActive: 'Table Row Reorder - Active.svg',\n tableRowReorderNormal: 'Table Row Reorder - Normal.svg',\n\n // Medical\n prescription: 'Prescription-Rx.svg',\n pushPin: 'Push Pin.svg',\n robot: 'Robot.svg',\n medicalFile: 'medical-file 1.svg',\n medicalFolder: 'medical-folder 1.svg',\n medicalInstrumentAmbulanceBed: 'medical-instrument-ambulance-bed 1.svg',\n medicalNotes: 'medical-notes 3.svg',\n hospitalShield: 'hospital-shield.svg',\n drugsBox: 'drugs-box 1.svg',\n\n // Common UI\n add: 'add 1.svg',\n addCircleAlternate: 'add-circle-alternate 1.svg',\n addCircleBold: 'add-circle-bold 1.svg',\n addCircle1: 'addCircle1.svg',\n alarmBell: 'alarm-bell-1 1.svg',\n alarmBellOff: 'alarm-bell-off 1.svg',\n alarmBellRing: 'alarm-bell-ring-1 1.svg',\n alarmBellTimer: 'alarm-bell-timer-1 1.svg',\n alertCircle: 'alert-circle 1.svg',\n alertTriangle: 'alert-triangle 2.svg',\n analyticsGraphBar: 'analytics-graph-bar 2.svg',\n\n // Arrows\n arrowButtonDown: 'arrow-button-down-2 2.svg',\n arrowButtonLeft1: 'arrow-button-left-1.svg',\n arrowButtonLeft2: 'arrow-button-left-2.svg',\n arrowButtonRight1: 'arrow-button-right-1 2.svg',\n arrowButtonRight2: 'arrow-button-right-2.svg',\n arrowButtonUp: 'arrow-button-up-2.svg',\n arrowDown1: 'arrow-down-1 1.svg',\n arrowDown: 'arrow-down.svg',\n arrowLeft1: 'arrow-left-1 3.svg',\n arrowLeft: 'arrow-left.svg',\n arrowRight1: 'arrow-right-1 2.svg',\n arrowRight: 'arrow-right.svg',\n arrowUp1: 'arrow-up-1 4.svg',\n arrowUp: 'arrow-up.svg',\n arrowThickCircleDown: 'arrow-thick-circle-down.svg',\n arrowThickCircleLeft: 'arrow-thick-circle-left.svg',\n arrowThickCircleRight: 'arrow-thick-circle-right.svg',\n arrowThickCircleUp: 'arrow-thick-circle-up.svg',\n arrowThickDown: 'arrow-thick-down-2.svg',\n arrowThickUp: 'arrow-thick-up-2.svg',\n\n // Files & Documents\n attachment: 'attachment.svg',\n bin: 'bin 1.svg',\n bookFlipPage: 'book-flip-page.svg',\n bookmarks: 'bookmarks-1 1.svg',\n bookmarksAlt: 'bookmarks-1 3.svg',\n commonFileText: 'common-file-text 2.svg',\n commonFileTextSearch: 'common-file-text-search.svg',\n commonFileUpload: 'common-file-upload.svg',\n officeFileSheet: 'office-file-sheet.svg',\n officeFileXls1: 'office-file-xls-1.svg',\n officeFileXls: 'office-file-xls.svg',\n requestFormIcon: 'request-form-icon.svg',\n\n // Media & Window\n appWindow: 'app-window-1 1.svg',\n appWindowMultiple: 'app-window-multiple 1.svg',\n archiveBooks: 'archive-books 1.svg',\n buttonPlayAlternate: 'button-play-alternate 1.svg',\n buttonRefreshArrow: 'button-refresh-arrow 1.svg',\n buttonRefreshArrows: 'button-refresh-arrows 2.svg',\n buttonStopAlternate: 'button-stop-alternate 1.svg',\n buttonSyncing: 'button-syncing.svg',\n answerMachinePaper: 'answer-machine-paper 1.svg',\n\n // Time & Calendar\n calendar: 'calendar-3 2.svg',\n timeClock: 'time-clock-circle.svg',\n phoneActionsClock: 'phone-actions-clock-1.svg',\n\n // Check & Close\n check1: 'check-1 1.svg',\n check2: 'check-2 1.svg',\n checkCircle1: 'check-circle-1 1.svg',\n checkCircle1Alternate: 'check-circle-1-alternate 1.svg',\n close: 'close 1.svg',\n\n // Settings & Tools\n cog: 'cog.svg',\n wrench: 'wrench.svg',\n cursor: 'cursor.svg',\n singleNeutralActionsSetting: 'single-neutral-actions-setting.svg',\n singleNeutralActionsUpDown: 'single-neutral-actions-up-down.svg',\n\n // Data & Search\n dataTransferVertical: 'data-transfer-vertical 1.svg',\n database: 'database-2 1.svg',\n databaseAlternate: 'database-2-alternate 1.svg',\n searchAlternate: 'search-alternate.svg',\n searchNoResult: 'searchNoResult.svg',\n diagramSplitHorizontal: 'diagram-split-horizontal 2.svg',\n\n // Downloads & Uploads\n downloadBottom: 'download-bottom.svg',\n uploadTop: 'common-file-upload.svg',\n uploadBottom: 'upload-bottom.svg',\n\n // Money & Business\n currencyDollarCircle: 'currency-dollar-circle.svg',\n shoppingCartEmpty: 'shopping-cart-empty-1 1.svg',\n officeWorkWireless: 'office-work-wireless.svg',\n\n // Communication\n envelope: 'envelope 2.svg',\n emailActionWarning: 'email-action-warning 2.svg',\n phoneActionsRecord: 'phone-actions-record.svg',\n phoneActionsRemove: 'phone-actions-remove-1.svg',\n phoneActionsVoiceMail: 'phone-actions-voice-mail.svg',\n\n // Layout & View\n layoutColumn: 'layout-column 1.svg',\n layoutDashboard: 'layout-dashboard 1.svg',\n layoutHeadline: 'layout-headline 1.svg',\n layoutModule: 'layout-module 1.svg',\n layoutModule1: 'layout-module-1 1.svg',\n layoutRightOpen: 'layout-right 1 - Open.svg',\n layoutRightClose: 'layout-right 2 - Close.svg',\n listBullets: 'list-bullets 3.svg',\n picturStackLandscape: 'picture-stack-landscape.svg',\n tvFlatScreen: 'tv-flat-screen 1.svg',\n view1: 'view-1.svg',\n view2: 'view-2.svg',\n viewOff1: 'view-off-1.svg',\n viewOff2: 'view-off-2.svg',\n scrollVertical: 'scroll-vertical-1 1.svg',\n\n // Info & Help\n informationCircle: 'information-circle 2.svg',\n questionCircle: 'question-circle 2.svg',\n\n // Actions\n pencil: 'pencil-1 1.svg',\n pencilWrite: 'pencil-write-1-alternate 1.svg',\n moveToBottom: 'move-to-bottom 1.svg',\n multipleActionsUpDown: 'multiple-actions-up-down 1.svg',\n multipleNeutral: 'multiple-neutral-1 3.svg',\n singleNeutralCircle: 'single-neutral-circle 1.svg',\n printText: 'print-text 1.svg',\n ratingStarStar: 'rating-star 1.svg',\n removeCircleAlternate: 'remove-circle-alternate 1.svg',\n removeCircleBold: 'remove-circle-bold 2.svg',\n subtractCircleAlternate: 'subtract-circle-alternate.svg',\n subtractCircle1: 'subtractCircle1.svg',\n takingPicturesCircleAlternate: 'taking-pictures-circle-alternate.svg',\n taskChecklistCheck: 'task-checklist-check.svg',\n taskListMultiple: 'task-list-multiple.svg',\n taskListTextAlternate: 'task-list-text-alternate 1.svg',\n\n // Location & Navigation\n locationTarget: 'location-target.svg',\n hierarchy: 'hierarchy.svg',\n styleThreePinNavigation: 'style-three-pin-navigation-location-1.svg',\n styleThreePinHospital: 'style-three-pin-hospital 2.svg',\n\n // Security & Lock\n lock: 'lock-4.svg',\n logout: 'logout-1-alternate.svg',\n\n // Home & Places\n house: 'house-2 1.svg',\n houseAlternate: 'house-2-alternate 1.svg',\n folderEmpty: 'folder-empty-1-alternate.svg',\n\n // Other\n expand: 'expand-5 1.svg',\n expandHorizontal: 'expand-horizontal-left-right.svg',\n notesPaperText: 'notes-paper-text 1.svg',\n skull: 'skull-2.svg',\n filter: 'filter-2.svg',\n\n // Placeholder\n placeholder: '00_Placeholder.svg',\n\n // Dropdowns\n arrowCustomDropdownDown: 'Arrow - Custom Dropdown - Down.svg',\n arrowCustomDropdownUp: 'Arrow - Custom Dropdown - Up.svg',\n\n // Button States\n buttonLoading: 'Button Loading.svg',\n buttonPause: 'button-pause.svg',\n buttonPauseAlternate: 'button-pause-alternate.svg',\n\n // Additional Icons\n addAlt: 'add.svg',\n alertTriangleAlt: 'alert-triangle 2-alt.svg',\n appWindowExpand: 'app-window-expand-1.svg',\n cursorHandAlternate: 'cursor-hand-1-alternate.svg',\n expandFull: 'expand-full.svg',\n expandHorizontal4: 'expand-horizontal-4.svg',\n fileCopyrightUser: 'file-copyright-user.svg',\n floppyDisk: 'floppy-disk.svg',\n keyboardArrowReturn: 'keyboard-arrow-return.svg',\n lock1: 'lock-1.svg',\n navigationMenuHorizontal: 'navigation-menu-horizontal-1 1.svg',\n officeFilePdf: 'office-file-pdf-1.svg',\n passwordLock: 'password-lock.svg',\n presentationProjectorScreenClock: 'presentation-projector-screen-clock.svg',\n programmingCode: 'programming-code.svg',\n questionAlt: 'question - alt.svg',\n ratingStarOutline: 'rating-star-outline 1.svg',\n readEmailLaptop: 'read-email-laptop.svg',\n robotIcon: 'robot.svg',\n sorting: 'Sorting.svg',\n wench: 'wench.svg',\n zoomIn: 'zoom-in-1.svg',\n zoomOut: 'zoom-out-1.svg',\n bookmarksList: 'bookmarks List.svg',\n bookmarksAdd: 'bookmarks-Add.svg',\n bookmarksDelete: 'bookmarks-Delete.svg',\n diagramAllDirectionExpand: 'diagram-all-direction-expand.svg',\n commonFileTextQuestion: 'common-file-text-question.svg',\n commonFileTextWarning: 'common-file-text-warning.svg',\n downloadButtonAlternate: 'download-button-alternate.svg',\n expand1: 'expand-1.svg',\n};\n\n/**\n * Get the file path for a custom icon\n */\nexport const getCustomIconPath = (iconName: string): string => {\n return `/src/assets/icons/individual/${CUSTOM_ICON_MAP[iconName] || ''}`;\n};\n\n/**\n * List of all available custom icon names\n */\nexport const CUSTOM_ICON_NAMES = Object.keys(CUSTOM_ICON_MAP);\n","/**\n * Custom Icon Hook\n * Provides unified access to custom SVG icons and Ant Design icons\n * Maps icon names to components with fallback support\n */\n\nimport React from 'react';\nimport {\n SmileOutlined,\n FrownOutlined,\n MehOutlined,\n CheckCircleOutlined,\n CloseCircleOutlined,\n ExclamationCircleOutlined,\n InfoCircleOutlined,\n QuestionCircleOutlined,\n SearchOutlined,\n FilterOutlined,\n DeleteOutlined,\n PlusOutlined,\n MinusOutlined,\n EditOutlined,\n CopyOutlined,\n DownloadOutlined,\n UploadOutlined,\n SaveOutlined,\n SettingOutlined,\n LockOutlined,\n UnlockOutlined,\n MenuOutlined,\n HomeOutlined,\n FileOutlined,\n FolderOutlined,\n SyncOutlined,\n ClockCircleOutlined,\n LoadingOutlined,\n CalendarOutlined,\n BellOutlined,\n MailOutlined,\n PhoneOutlined,\n LogoutOutlined,\n UserOutlined,\n TeamOutlined,\n ApiOutlined,\n DashboardOutlined,\n TableOutlined,\n BarChartOutlined,\n LineChartOutlined,\n PieChartOutlined,\n CloudOutlined,\n DatabaseOutlined,\n ToolOutlined,\n BugOutlined,\n CheckOutlined,\n CloseOutlined,\n CreditCardOutlined,\n ShoppingCartOutlined,\n ShoppingOutlined,\n PrinterOutlined,\n ExportOutlined,\n ImportOutlined,\n LinkOutlined,\n EyeOutlined,\n EyeInvisibleOutlined,\n ZoomInOutlined,\n ZoomOutOutlined,\n AlignLeftOutlined,\n AlignCenterOutlined,\n AlignRightOutlined,\n BgColorsOutlined,\n FontColorsOutlined,\n} from '@ant-design/icons';\n\nimport { CUSTOM_ICON_MAP } from './iconMapping';\n\nconst CUSTOM_SVG_MODULES = import.meta.glob<string>('../assets/icons/individual/*.svg', {\n query: '?raw',\n import: 'default',\n eager: true,\n});\n\n// Ant Design icon mapping\nconst ANT_ICON_MAP: Record<string, React.ComponentType<any>> = {\n // Feedback\n smile: SmileOutlined,\n frown: FrownOutlined,\n meh: MehOutlined,\n checkCircle: CheckCircleOutlined,\n closeCircle: CloseCircleOutlined,\n exclamation: ExclamationCircleOutlined,\n exclamationCircle: ExclamationCircleOutlined,\n info: InfoCircleOutlined,\n infoCircle: InfoCircleOutlined,\n question: QuestionCircleOutlined,\n questionCircle: QuestionCircleOutlined,\n\n // Search & Filter\n search: SearchOutlined,\n filter: FilterOutlined,\n\n // CRUD Operations\n delete: DeleteOutlined,\n add: PlusOutlined,\n plus: PlusOutlined,\n minus: MinusOutlined,\n edit: EditOutlined,\n pencil: EditOutlined,\n copy: CopyOutlined,\n download: DownloadOutlined,\n upload: UploadOutlined,\n save: SaveOutlined,\n\n // Settings\n settings: SettingOutlined,\n setting: SettingOutlined,\n cog: SettingOutlined,\n tool: ToolOutlined,\n wrench: ToolOutlined,\n\n // Security\n lock: LockOutlined,\n unlock: UnlockOutlined,\n logout: LogoutOutlined,\n\n // Navigation\n menu: MenuOutlined,\n home: HomeOutlined,\n house: HomeOutlined,\n\n // Files & Folders\n file: FileOutlined,\n folder: FolderOutlined,\n\n // Status & Loading\n loading: LoadingOutlined,\n sync: SyncOutlined,\n clock: ClockCircleOutlined,\n check: CheckOutlined,\n close: CloseOutlined,\n x: CloseOutlined,\n\n // Time & Calendar\n calendar: CalendarOutlined,\n time: ClockCircleOutlined,\n\n // Communication\n bell: BellOutlined,\n mail: MailOutlined,\n email: MailOutlined,\n phone: PhoneOutlined,\n\n // Users\n user: UserOutlined,\n team: TeamOutlined,\n users: TeamOutlined,\n\n // Dashboard & Data\n dashboard: DashboardOutlined,\n table: TableOutlined,\n barChart: BarChartOutlined,\n lineChart: LineChartOutlined,\n pieChart: PieChartOutlined,\n api: ApiOutlined,\n\n // Infrastructure\n cloud: CloudOutlined,\n database: DatabaseOutlined,\n\n // Development\n bug: BugOutlined,\n\n // Finance\n creditCard: CreditCardOutlined,\n shoppingCart: ShoppingCartOutlined,\n shopping: ShoppingOutlined,\n\n // Document\n print: PrinterOutlined,\n export: ExportOutlined,\n import: ImportOutlined,\n\n // Links & Views\n link: LinkOutlined,\n eye: EyeOutlined,\n eyeOff: EyeInvisibleOutlined,\n eyeInvisible: EyeInvisibleOutlined,\n zoomIn: ZoomInOutlined,\n zoomOut: ZoomOutOutlined,\n\n // Text Formatting\n alignLeft: AlignLeftOutlined,\n alignCenter: AlignCenterOutlined,\n alignRight: AlignRightOutlined,\n bgColors: BgColorsOutlined,\n fontColors: FontColorsOutlined,\n};\n\n/**\n * Custom SVG Icon Component\n * Embeds SVG files so packaged consumers do not need to host source assets.\n */\nexport const CustomSvgIcon: React.FC<{\n fileName: string;\n size?: number;\n className?: string;\n style?: React.CSSProperties;\n}> = ({ fileName, size = 24, className, style }) => {\n const svgContent = CUSTOM_SVG_MODULES[`../assets/icons/individual/${fileName}`];\n\n if (!svgContent) {\n console.warn(`Custom SVG icon file \"${fileName}\" was not bundled`);\n return <span className={className}>⚠️</span>;\n }\n\n return (\n <span\n className={className}\n style={{\n width: size,\n height: size,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n lineHeight: 0,\n ...style,\n }}\n dangerouslySetInnerHTML={{ __html: svgContent }}\n />\n );\n};\n\n/**\n * useCustomIcon Hook\n * Retrieves an icon by name, supporting both custom SVGs and Ant Design icons\n *\n * @param iconName - Name of the icon (e.g., 'smile', 'add', 'callBackRequest')\n * @param options - Optional configuration\n * @returns React component for the icon\n *\n * @example\n * // Using Ant Design icon\n * const icon = useCustomIcon('smile', { size: 24 });\n *\n * @example\n * // Using custom SVG\n * const icon = useCustomIcon('callBackRequest', { size: 32 });\n */\nexport const useCustomIcon = (\n iconName: string,\n options?: {\n size?: number;\n className?: string;\n style?: React.CSSProperties;\n }\n) => {\n const { size = 24, className, style } = options || {};\n\n // Check if it's an Ant Design icon\n const AntIcon = ANT_ICON_MAP[iconName];\n if (AntIcon) {\n return (\n <AntIcon\n style={{ fontSize: size, ...style }}\n className={className}\n />\n );\n }\n\n // Check if it's a custom SVG icon\n const customIconFile = CUSTOM_ICON_MAP[iconName];\n if (customIconFile) {\n return (\n <CustomSvgIcon\n fileName={customIconFile}\n size={size}\n className={className}\n style={style}\n />\n );\n }\n\n // Icon not found\n console.warn(`Icon \"${iconName}\" not found in custom or Ant Design icons`);\n return <span className={className}>❌</span>;\n};\n\n/**\n * Icon Component\n * Stateless wrapper for easy use in JSX\n *\n * @example\n * <Icon name=\"callBackRequest\" size={32} />\n * <Icon name=\"smile\" size={24} className=\"my-icon\" />\n */\nexport const Icon: React.FC<{\n name: string;\n size?: number;\n className?: string;\n style?: React.CSSProperties;\n}> = ({ name, size = 24, className, style }) => {\n return useCustomIcon(name, { size, className, style });\n};\n\n/**\n * Get list of all available icon names\n */\nexport const getAvailableIcons = () => {\n return {\n ant: Object.keys(ANT_ICON_MAP),\n custom: Object.keys(CUSTOM_ICON_MAP),\n };\n};\n\n/**\n * Check if an icon exists\n */\nexport const iconExists = (iconName: string): boolean => {\n return iconName in ANT_ICON_MAP || iconName in CUSTOM_ICON_MAP;\n};\n","import { dsSemanticTokens } from '../../theme/ontadaTheme';\n\nconst STYLE_ID = 'ds-select-styles';\n\nexport const DS_SELECT_CLASS = 'ds-select';\nexport const DS_SELECT_READONLY_CLASS = 'ds-select-readonly';\nexport const DS_SELECT_FORCE_HOVER_CLASS = 'ds-select-force-hover';\nexport const DS_SELECT_FORCE_FOCUS_CLASS = 'ds-select-force-focus';\nexport const DS_SELECT_DROPDOWN_CLASS = 'ds-select-dropdown';\nexport const DS_SELECT_DROPDOWN_CHECKBOX_CLASS = 'ds-select-dropdown-checkboxes';\nexport const DS_SELECT_DROPDOWN_MULTI_CLASS = 'ds-select-dropdown-multi';\n\nexport const mergeClassNames = (...classNames: Array<string | undefined>): string =>\n classNames.filter(Boolean).join(' ').trim();\n\nexport const ensureSelectStyles = () => {\n if (typeof document === 'undefined' || document.getElementById(STYLE_ID)) {\n return;\n }\n\n const { input } = dsSemanticTokens;\n const style = document.createElement('style');\n style.id = STYLE_ID;\n\n style.textContent = `\n .${DS_SELECT_CLASS}.ant-select {\n border-color: transparent !important;\n border-width: ${input.border.widthDefault} !important;\n border-style: solid !important;\n border-radius: 4px !important;\n background-color: ${input.background.default} !important;\n font-family: var(--ant-font-family, 'Nunito', sans-serif) !important;\n box-shadow: inset 0 0 0 ${input.border.widthDefault} ${input.border.default} !important;\n transition: border-color 120ms ease, border-width 120ms ease;\n display: inline-flex !important;\n align-items: center !important;\n }\n\n .${DS_SELECT_CLASS}.ant-select.ant-select-outlined {\n border: ${input.border.widthDefault} solid transparent !important;\n box-shadow: inset 0 0 0 ${input.border.widthDefault} ${input.border.default} !important;\n }\n\n .${DS_SELECT_CLASS}.ant-select .ant-select-content {\n display: flex !important;\n min-height: 18px !important;\n padding: 0 !important;\n font-family: var(--ant-font-family, 'Nunito', sans-serif) !important;\n font-size: 14px !important;\n line-height: 18px !important;\n align-items: center !important;\n }\n\n .${DS_SELECT_CLASS}.ant-select .ant-select-content.ant-select-content-has-value {\n display: flex !important;\n align-items: center !important;\n line-height: 18px !important;\n }\n\n .${DS_SELECT_CLASS}.ant-select.ant-select-multiple .ant-select-content {\n min-height: 32px !important;\n height: 32px !important;\n margin: 0 !important;\n align-items: center !important;\n display: flex !important;\n flex-wrap: nowrap !important;\n overflow: hidden !important;\n }\n\n .${DS_SELECT_CLASS}.ant-select.ant-select-multiple .ant-select-selection-item {\n display: inline-flex !important;\n align-items: center !important;\n min-height: 18px !important;\n height: auto !important;\n line-height: 18px !important;\n margin: 0 4px 0 0 !important;\n padding: 0 !important;\n box-sizing: border-box !important;\n }\n\n .${DS_SELECT_CLASS}.ant-select.ant-select-multiple .ant-select-selection-item-content {\n display: inline-flex !important;\n align-items: center !important;\n line-height: 18px !important;\n margin: 0 !important;\n }\n\n .${DS_SELECT_CLASS}.ant-select.ant-select-multiple .ant-select-selection-item-remove {\n display: inline-flex !important;\n align-items: center !important;\n height: 18px !important;\n margin: 0 !important;\n }\n\n .${DS_SELECT_CLASS}.ant-select .ant-select-content .ant-select-placeholder,\n .${DS_SELECT_CLASS}.ant-select .ant-select-placeholder {\n font-family: var(--ant-font-family, 'Nunito', sans-serif) !important;\n color: ${input.text.placeholder} !important;\n opacity: 1 !important;\n font-size: 14px !important;\n line-height: 18px !important;\n font-weight: 400 !important;\n }\n\n .${DS_SELECT_CLASS}.ant-select .ant-select-content .ant-select-selection-item,\n .${DS_SELECT_CLASS}.ant-select .ant-select-selection-item {\n font-family: var(--ant-font-family, 'Nunito', sans-serif) !important;\n color: ${input.text.focus} !important;\n font-size: 14px !important;\n line-height: 18px !important;\n font-weight: 400 !important;\n }\n\n .${DS_SELECT_CLASS}.ant-select .ant-select-selection-search-input,\n .${DS_SELECT_CLASS}.ant-select .ant-select-selection-search-input input {\n font-family: var(--ant-font-family, 'Nunito', sans-serif) !important;\n }\n\n .${DS_SELECT_CLASS}.ant-select .ant-select-suffix,\n .${DS_SELECT_CLASS}.ant-select .ant-select-suffix .anticon {\n color: ${input.text.focus} !important;\n font-size: 10px !important;\n }\n\n .${DS_SELECT_CLASS}.ant-select .ant-select-suffix svg {\n width: 10px !important;\n height: 10px !important;\n display: block;\n }\n\n .${DS_SELECT_CLASS}.ant-select:not(.ant-select-disabled):hover,\n .${DS_SELECT_CLASS}.ant-select.ant-select-outlined:not(.ant-select-disabled):hover {\n border: ${input.border.widthDefault} solid transparent !important;\n box-shadow: inset 0 0 0 ${input.border.widthDefault} ${input.border.hover} !important;\n }\n\n .${DS_SELECT_CLASS}.ant-select.${DS_SELECT_FORCE_HOVER_CLASS}:not(.ant-select-disabled):not(.${DS_SELECT_READONLY_CLASS}) {\n border: ${input.border.widthDefault} solid transparent !important;\n box-shadow: inset 0 0 0 ${input.border.widthDefault} ${input.border.hover} !important;\n }\n\n .${DS_SELECT_CLASS}.ant-select.ant-select-focused,\n .${DS_SELECT_CLASS}.ant-select.ant-select-open {\n border-color: transparent !important;\n border-width: ${input.border.widthDefault} !important;\n border-style: solid !important;\n box-shadow: inset 0 0 0 ${input.border.widthFocus} ${input.border.focus} !important;\n }\n\n .${DS_SELECT_CLASS}.ant-select.ant-select-outlined.ant-select-focused,\n .${DS_SELECT_CLASS}.ant-select.ant-select-outlined.ant-select-open {\n border-color: transparent !important;\n border-width: ${input.border.widthDefault} !important;\n border-style: solid !important;\n box-shadow: inset 0 0 0 ${input.border.widthFocus} ${input.border.focus} !important;\n }\n\n .${DS_SELECT_CLASS}.ant-select.ant-select-outlined.ant-select-focused:hover,\n .${DS_SELECT_CLASS}.ant-select.ant-select-outlined.ant-select-open:hover,\n .${DS_SELECT_CLASS}.ant-select.ant-select-outlined.ant-select-focused:focus-within,\n .${DS_SELECT_CLASS}.ant-select.ant-select-outlined.ant-select-open:focus-within {\n border-color: transparent !important;\n border-width: ${input.border.widthDefault} !important;\n border-style: solid !important;\n box-shadow: inset 0 0 0 ${input.border.widthFocus} ${input.border.focus} !important;\n }\n\n .${DS_SELECT_CLASS}.ant-select.${DS_SELECT_FORCE_FOCUS_CLASS}:not(.ant-select-disabled):not(.${DS_SELECT_READONLY_CLASS}) {\n border-color: transparent !important;\n border-width: ${input.border.widthDefault} !important;\n border-style: solid !important;\n box-shadow: inset 0 0 0 ${input.border.widthFocus} ${input.border.focus} !important;\n }\n\n .${DS_SELECT_CLASS}.ant-select [role='combobox'] {\n line-height: 18px !important;\n }\n\n .${DS_SELECT_CLASS}.ant-select.ant-select-open .ant-select-suffix .anticon,\n .${DS_SELECT_CLASS}.ant-select.ant-select-focused .ant-select-suffix .anticon {\n transform: none !important;\n color: ${input.text.focus} !important;\n }\n\n .${DS_SELECT_CLASS}.ant-select.ant-select-focused .ant-select-content .ant-select-placeholder,\n .${DS_SELECT_CLASS}.ant-select.ant-select-open .ant-select-content .ant-select-placeholder,\n .${DS_SELECT_CLASS}.ant-select.ant-select-focused .ant-select-content .ant-select-selection-item,\n .${DS_SELECT_CLASS}.ant-select.ant-select-open .ant-select-content .ant-select-selection-item {\n color: #181818 !important;\n font-weight: 600 !important;\n }\n\n .${DS_SELECT_CLASS}.ant-select.${DS_SELECT_FORCE_FOCUS_CLASS}:not(.ant-select-disabled):not(.${DS_SELECT_READONLY_CLASS}) .ant-select-content .ant-select-placeholder,\n .${DS_SELECT_CLASS}.ant-select.${DS_SELECT_FORCE_FOCUS_CLASS}:not(.ant-select-disabled):not(.${DS_SELECT_READONLY_CLASS}) .ant-select-content .ant-select-selection-item {\n color: #181818 !important;\n font-weight: 600 !important;\n }\n\n .${DS_SELECT_CLASS}.ant-select.ant-select-status-error {\n border-color: transparent !important;\n box-shadow: inset 0 0 0 ${input.border.widthDefault} ${input.border.error} !important;\n }\n\n .${DS_SELECT_CLASS}.ant-select.ant-select-status-warning {\n border-color: transparent !important;\n box-shadow: inset 0 0 0 ${input.border.widthDefault} #D3722E !important;\n }\n\n .${DS_SELECT_CLASS}.ant-select.ant-select-status-success {\n border-color: transparent !important;\n box-shadow: inset 0 0 0 ${input.border.widthDefault} ${input.border.success} !important;\n }\n\n .${DS_SELECT_CLASS}.ant-select.ant-select-disabled {\n background-color: ${input.background.disabled} !important;\n border-color: transparent !important;\n box-shadow: none !important;\n }\n\n .${DS_SELECT_CLASS}.ant-select.ant-select-disabled .ant-select-selection-item,\n .${DS_SELECT_CLASS}.ant-select.ant-select-disabled .ant-select-selection-placeholder,\n .${DS_SELECT_CLASS}.ant-select.ant-select-disabled .ant-select-arrow {\n color: ${input.text.disabled} !important;\n }\n\n .${DS_SELECT_CLASS}.ant-select.${DS_SELECT_READONLY_CLASS}:not(.ant-select-disabled) {\n background-color: ${input.background.readOnly} !important;\n border-color: transparent !important;\n box-shadow: inset 0 0 0 ${input.border.widthDefault} ${input.border.default} !important;\n cursor: default !important;\n }\n\n .${DS_SELECT_CLASS}.ant-select.${DS_SELECT_READONLY_CLASS}:not(.ant-select-disabled) .ant-select-selector {\n background-color: ${input.background.readOnly} !important;\n background: ${input.background.readOnly} !important;\n box-shadow: none !important;\n }\n\n .${DS_SELECT_CLASS}.ant-select.${DS_SELECT_READONLY_CLASS}:not(.ant-select-disabled) .ant-select-selection-item,\n .${DS_SELECT_CLASS}.ant-select.${DS_SELECT_READONLY_CLASS}:not(.ant-select-disabled) .ant-select-selection-placeholder,\n .${DS_SELECT_CLASS}.ant-select.${DS_SELECT_READONLY_CLASS}:not(.ant-select-disabled) .ant-select-arrow {\n color: ${input.text.readOnly} !important;\n }\n\n .${DS_SELECT_CLASS}.ant-select.${DS_SELECT_READONLY_CLASS}:not(.ant-select-disabled):hover,\n .${DS_SELECT_CLASS}.ant-select.${DS_SELECT_READONLY_CLASS}:not(.ant-select-disabled).ant-select-focused,\n .${DS_SELECT_CLASS}.ant-select.${DS_SELECT_READONLY_CLASS}:not(.ant-select-disabled).ant-select-open {\n box-shadow: inset 0 0 0 ${input.border.widthDefault} ${input.border.default} !important;\n }\n\n .${DS_SELECT_CLASS}.ant-select.ant-select-sm {\n min-height: ${input.height.small} !important;\n height: ${input.height.small} !important;\n padding: 0 ${input.padding.small.x} !important;\n }\n\n .${DS_SELECT_CLASS}.ant-select.ant-select-sm .ant-select-content,\n .${DS_SELECT_CLASS}.ant-select.ant-select-sm .ant-select-selection-item,\n .${DS_SELECT_CLASS}.ant-select.ant-select-sm .ant-select-selection-placeholder {\n min-height: ${input.height.small} !important;\n line-height: 18px !important;\n }\n\n .${DS_SELECT_CLASS}.ant-select {\n min-height: ${input.height.middle} !important;\n height: ${input.height.middle} !important;\n padding: 0 ${input.padding.middle.x} !important;\n }\n\n .${DS_SELECT_CLASS}.ant-select .ant-select-content,\n .${DS_SELECT_CLASS}.ant-select .ant-select-selection-item,\n .${DS_SELECT_CLASS}.ant-select .ant-select-selection-placeholder {\n min-height: ${input.height.middle} !important;\n line-height: 18px !important;\n }\n\n .${DS_SELECT_CLASS}.ant-select.ant-select-lg {\n min-height: ${input.height.large} !important;\n height: ${input.height.large} !important;\n padding: 0 ${input.padding.large.x} !important;\n }\n\n .${DS_SELECT_CLASS}.ant-select.ant-select-lg .ant-select-content,\n .${DS_SELECT_CLASS}.ant-select.ant-select-lg .ant-select-selection-item,\n .${DS_SELECT_CLASS}.ant-select.ant-select-lg .ant-select-selection-placeholder {\n min-height: ${input.height.large} !important;\n line-height: 18px !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.ant-select-dropdown {\n border: 1px solid #1e394e !important;\n border-radius: 4px !important;\n background: #ffffff !important;\n --ant-select-option-active-bg: transparent;\n --ant-select-option-selected-bg: #faf0c8;\n box-shadow: 0 4px 4px rgba(38, 44, 54, 0.15) !important;\n overflow: hidden !important;\n padding: 0 !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.ant-select-dropdown .ant-select-item {\n border-bottom: 1px solid #bac5cc !important;\n min-height: 34px !important;\n padding: 8px 16px !important;\n border-radius: 0 !important;\n color: #1e394e !important;\n font-family: var(--ant-font-family, 'Nunito', sans-serif) !important;\n font-size: 14px !important;\n line-height: 18px !important;\n background: #ffffff !important;\n transition: none !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.ant-select-dropdown .ant-select-item-option-content {\n color: inherit !important;\n font-size: inherit !important;\n line-height: inherit !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.ant-select-dropdown .ant-select-item-option-active:not(.ant-select-item-option-selected),\n .${DS_SELECT_DROPDOWN_CLASS}.ant-select-dropdown .ant-select-item-option:not(.ant-select-item-option-selected):hover {\n background: #f3f2f1 !important;\n background-color: #f3f2f1 !important;\n background-image: none !important;\n color: #181818 !important;\n font-weight: 600 !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.ant-select-dropdown .ant-select-item-option-active:not(.ant-select-item-option-selected) .ant-select-item-option-content,\n .${DS_SELECT_DROPDOWN_CLASS}.ant-select-dropdown .ant-select-item-option:not(.ant-select-item-option-selected):hover .ant-select-item-option-content {\n background: transparent !important;\n background-color: transparent !important;\n background-image: none !important;\n color: #181818 !important;\n font-weight: 600 !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.ant-select-dropdown .ant-select-item-option-selected {\n background: #faf0c8 !important;\n background-color: #faf0c8 !important;\n background-image: none !important;\n color: #181818 !important;\n font-weight: 600 !important;\n position: relative;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.ant-select-dropdown .ant-select-item-option-selected.ant-select-item-option-active {\n background: #faf0c8 !important;\n background-color: #faf0c8 !important;\n background-image: none !important;\n color: #181818 !important;\n font-weight: 600 !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_MULTI_CLASS}.ant-select-dropdown:not(.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}) .ant-select-item-option-selected,\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_MULTI_CLASS}.ant-select-dropdown:not(.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}) .ant-select-item-option-selected.ant-select-item-option-active,\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_MULTI_CLASS}.ant-select-dropdown:not(.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}) .ant-select-item-option-selected:not(.ant-select-item-option-disabled),\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_MULTI_CLASS}.ant-select-dropdown:not(.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}) .ant-select-item-option-selected.ant-select-item-option-active:not(.ant-select-item-option-disabled) {\n background: #faf0c8 !important;\n background-color: #faf0c8 !important;\n background-image: none !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.ant-select-dropdown:not(.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}) .ant-select-item-option-selected::before {\n content: '';\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n width: 4px;\n background: #f7c91e;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_MULTI_CLASS}.ant-select-dropdown .ant-select-item-option-state {\n display: none !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.ant-select-dropdown .ant-empty {\n margin: 0 !important;\n padding: 12px 16px !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.ant-select-dropdown .ds-select-all-row {\n display: flex !important;\n align-items: center !important;\n padding: 8px 16px !important;\n border-bottom: 1px solid #bac5cc !important;\n background: #ffffff !important;\n min-height: 38px !important;\n box-sizing: border-box !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.ant-select-dropdown .ds-select-all-row .ant-checkbox-wrapper {\n margin: 0 !important;\n display: inline-flex !important;\n align-items: center !important;\n gap: 8px !important;\n line-height: 18px !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.ant-select-dropdown .ds-select-all-row .ant-checkbox {\n width: 18px !important;\n height: 18px !important;\n min-width: 18px !important;\n min-height: 18px !important;\n display: inline-flex !important;\n align-items: center !important;\n justify-content: center !important;\n border-radius: 2px !important;\n overflow: hidden !important;\n background: transparent !important;\n border: 0 !important;\n color: transparent !important;\n box-shadow: none !important;\n position: relative !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.ant-select-dropdown .ds-select-all-row .ant-checkbox::before,\n .${DS_SELECT_DROPDOWN_CLASS}.ant-select-dropdown .ds-select-all-row .ant-checkbox::after {\n content: none !important;\n display: none !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.ant-select-dropdown .ds-select-all-row .ant-checkbox-input {\n appearance: none !important;\n -webkit-appearance: none !important;\n width: 18px !important;\n height: 18px !important;\n min-width: 18px !important;\n min-height: 18px !important;\n margin: 0 !important;\n border: 1px solid #627386 !important;\n border-radius: 2px !important;\n background: #ffffff !important;\n cursor: pointer !important;\n position: relative !important;\n box-sizing: border-box !important;\n display: block !important;\n inset: 0 !important;\n z-index: 1 !important;\n opacity: 1 !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.ant-select-dropdown .ds-select-all-row .ant-checkbox-input:checked,\n .${DS_SELECT_DROPDOWN_CLASS}.ant-select-dropdown .ds-select-all-row .ant-checkbox-input:indeterminate,\n .${DS_SELECT_DROPDOWN_CLASS}.ant-select-dropdown .ds-select-all-row .ant-checkbox-indeterminate .ant-checkbox-input {\n border-color: #007cc1 !important;\n background: #007cc1 !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.ant-select-dropdown .ds-select-all-row .ant-checkbox-input:checked::after {\n content: '';\n position: absolute;\n width: 9px;\n height: 5px;\n left: 4px;\n top: 4px;\n border-left: 2px solid #ffffff;\n border-bottom: 2px solid #ffffff;\n transform: rotate(-45deg);\n box-sizing: border-box;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.ant-select-dropdown .ds-select-all-row .ant-checkbox-input:indeterminate::after,\n .${DS_SELECT_DROPDOWN_CLASS}.ant-select-dropdown .ds-select-all-row .ant-checkbox-indeterminate .ant-checkbox-input::after {\n content: '';\n position: absolute;\n width: 8px;\n height: 2px;\n left: 4px;\n top: 8px;\n background: #ffffff;\n border-radius: 1px;\n box-sizing: border-box;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.ant-select-dropdown .ds-select-all-row .ant-checkbox.ant-checkbox-indeterminate {\n width: 18px !important;\n height: 18px !important;\n min-width: 18px !important;\n min-height: 18px !important;\n border: 0 !important;\n border-radius: 2px !important;\n background: transparent !important;\n background-color: transparent !important;\n color: transparent !important;\n opacity: 1 !important;\n filter: none !important;\n box-shadow: none !important;\n box-sizing: border-box !important;\n position: relative !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.ant-select-dropdown .ds-select-all-row .ant-checkbox.ant-checkbox-indeterminate::after {\n content: none !important;\n display: none !important;\n position: absolute !important;\n width: 8px !important;\n height: 2px !important;\n left: 4px !important;\n top: 8px !important;\n background: #ffffff !important;\n border: 0 !important;\n border-radius: 1px !important;\n transform: none !important;\n box-sizing: border-box !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.ant-select-dropdown .ds-select-all-row .ant-checkbox.ant-checkbox-indeterminate .ant-checkbox-input {\n opacity: 1 !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown {\n background: #ffffff !important;\n --ant-select-option-active-bg: #f3f2f1;\n --ant-select-option-selected-bg: #faf0c8;\n border: 1px solid #1e394e !important;\n border-radius: 4px !important;\n box-shadow: 0 4px 4px rgba(38, 44, 54, 0.15) !important;\n padding: 0 !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ds-select-all-row {\n padding: 16px 16px 7px !important;\n background: #ffffff !important;\n display: flex !important;\n flex-direction: column !important;\n align-items: stretch !important;\n min-height: 58px !important;\n margin: 0 !important;\n box-sizing: border-box !important;\n border-bottom: 0 !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ds-select-all-row .ant-checkbox-wrapper {\n margin: 0 !important;\n color: #1e394e !important;\n font-size: 14px !important;\n line-height: 18px !important;\n display: inline-flex !important;\n align-items: center !important;\n gap: 8px !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ds-select-all-divider {\n height: 1px !important;\n margin: 16px 0 0 !important;\n background: #bac5cc !important;\n width: 100% !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ant-select-item {\n min-height: 34px !important;\n padding: 8px 16px !important;\n border-bottom: 1px solid #bac5cc !important;\n background: #ffffff !important;\n color: #1e394e !important;\n font-size: 14px !important;\n line-height: 18px !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ant-select-item:last-child {\n border-bottom: 0 !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ant-select-item-option-active:not(.ant-select-item-option-selected) {\n background: #f3f2f1 !important;\n background-color: #f3f2f1 !important;\n background-image: none !important;\n color: #181818 !important;\n font-weight: 600 !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ant-select-item-option-active:not(.ant-select-item-option-selected) .ant-select-item-option-content {\n background: #f3f2f1 !important;\n background-color: #f3f2f1 !important;\n background-image: none !important;\n color: #181818 !important;\n font-weight: 600 !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ant-select-item-option-active:not(.ant-select-item-option-selected) .ds-checkbox-option-content,\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ant-select-item-option-active:not(.ant-select-item-option-selected) .ant-checkbox-wrapper {\n color: #181818 !important;\n font-weight: 600 !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ant-select-item-option-selected {\n background: #faf0c8 !important;\n background-color: #faf0c8 !important;\n background-image: none !important;\n color: #1e394e !important;\n font-weight: 400 !important;\n position: relative;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ant-select-item-option-selected.ant-select-item-option-active {\n --ant-select-option-active-bg: transparent;\n background: #faf0c8 !important;\n background-color: #faf0c8 !important;\n background-image: none !important;\n color: #1e394e !important;\n font-weight: 400 !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ant-select-item-option-selected .ant-select-item-option-content,\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ant-select-item-option-selected.ant-select-item-option-active .ant-select-item-option-content,\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ant-select-item-option-selected.ant-select-item-option-active .ds-checkbox-option-content,\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ant-select-item-option-selected.ant-select-item-option-active .ant-checkbox-wrapper {\n background: transparent !important;\n background-color: transparent !important;\n background-image: none !important;\n color: #1e394e !important;\n font-weight: 400 !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ant-select-item-option-selected::before,\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ant-select-item-option-selected::after,\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ant-select-item-option-selected.ant-select-item-option-active::before,\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ant-select-item-option-selected.ant-select-item-option-active::after {\n content: none !important;\n display: none !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ds-checkbox-option-content,\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ds-checkbox-option-content {\n display: inline-flex !important;\n align-items: center !important;\n gap: 8px !important;\n color: #1e394e !important;\n font-size: 14px !important;\n line-height: 18px !important;\n width: 100% !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ant-checkbox .ant-checkbox-inner {\n display: none !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ant-checkbox {\n width: 18px !important;\n height: 18px !important;\n min-width: 18px !important;\n min-height: 18px !important;\n display: inline-flex !important;\n align-items: center !important;\n justify-content: center !important;\n border-radius: 2px !important;\n overflow: hidden !important;\n background: transparent !important;\n border: 0 !important;\n color: transparent !important;\n box-shadow: none !important;\n position: relative !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ant-checkbox::before,\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ant-checkbox::after {\n content: none !important;\n display: none !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ant-checkbox-input {\n appearance: none !important;\n -webkit-appearance: none !important;\n width: 18px !important;\n height: 18px !important;\n min-width: 18px !important;\n min-height: 18px !important;\n margin: 0 !important;\n border: none !important;\n border-radius: 2px !important;\n background: #ffffff !important;\n cursor: pointer !important;\n position: relative !important;\n box-sizing: border-box !important;\n display: block !important;\n inset: 0 !important;\n z-index: 1 !important;\n opacity: 1 !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ant-checkbox-input:checked {\n border: none !important;\n background: #007cc1 !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ant-checkbox-input:checked::after {\n content: '';\n position: absolute;\n width: 9px;\n height: 5px;\n left: 4px;\n top: 4px;\n border-left: 2px solid #ffffff;\n border-bottom: 2px solid #ffffff;\n transform: rotate(-45deg);\n box-sizing: border-box;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ant-checkbox-wrapper:hover .ant-checkbox-input,\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ant-checkbox:hover .ant-checkbox-input {\n border-color: #1e394e !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ant-select-item-option-selected .ant-checkbox-wrapper:hover .ant-checkbox-input,\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ant-select-item-option-selected .ant-checkbox:hover .ant-checkbox-input,\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ant-select-item-option-selected .ant-checkbox-input:checked {\n border-color: #007cc1 !important;\n }\n\n /* Canonical checkbox visuals for checkbox-options dropdown:\n keep Ant inner box visible (unchecked), and align check/indeterminate glyphs. */\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ant-checkbox {\n position: relative !important;\n width: 18px !important;\n height: 18px !important;\n min-width: 18px !important;\n min-height: 18px !important;\n display: inline-flex !important;\n align-items: center !important;\n justify-content: center !important;\n border: 0 !important;\n background: transparent !important;\n box-shadow: none !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ant-checkbox .ant-checkbox-inner {\n display: block !important;\n width: 18px !important;\n height: 18px !important;\n border: 1px solid #627386 !important;\n border-radius: 2px !important;\n background: #ffffff !important;\n box-sizing: border-box !important;\n position: relative !important;\n top: 0 !important;\n left: 0 !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ant-checkbox-input {\n position: absolute !important;\n inset: 0 !important;\n width: 18px !important;\n height: 18px !important;\n margin: 0 !important;\n opacity: 0 !important;\n cursor: pointer !important;\n z-index: 2 !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ant-checkbox-checked .ant-checkbox-inner {\n border-color: #007cc1 !important;\n background: #007cc1 !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ant-checkbox-checked .ant-checkbox-inner::after {\n width: 5px !important;\n height: 9px !important;\n border: 0 solid #ffffff !important;\n border-top: 0 !important;\n border-left: 0 !important;\n border-right: 2px solid #ffffff !important;\n border-bottom: 2px solid #ffffff !important;\n transform: rotate(45deg) scale(1) !important;\n position: absolute !important;\n left: 5px !important;\n top: 2px !important;\n margin: 0 !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ant-checkbox-indeterminate .ant-checkbox-inner {\n border-color: #007cc1 !important;\n background: #007cc1 !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ant-checkbox-indeterminate .ant-checkbox-inner::after {\n content: '' !important;\n width: 8px !important;\n height: 2px !important;\n background: #ffffff !important;\n border: 0 !important;\n border-radius: 1px !important;\n position: absolute !important;\n left: 50% !important;\n top: 50% !important;\n transform: translate(-50%, -50%) !important;\n margin: 0 !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ant-checkbox-wrapper:hover .ant-checkbox-inner,\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ant-checkbox:hover .ant-checkbox-inner {\n border-color: #1e394e !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ant-checkbox-checked:hover .ant-checkbox-inner,\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ant-checkbox-indeterminate:hover .ant-checkbox-inner {\n border-color: #007cc1 !important;\n }\n\n /* Ant v5 checkbox markup in this project does not include .ant-checkbox-inner.\n Render the checkbox box and glyph directly on .ant-checkbox for reliable parity. */\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ant-checkbox {\n width: 18px !important;\n height: 18px !important;\n min-width: 18px !important;\n min-height: 18px !important;\n border: 1px solid #627386 !important;\n border-radius: 2px !important;\n background: #ffffff !important;\n box-sizing: border-box !important;\n display: inline-flex !important;\n align-items: center !important;\n justify-content: center !important;\n position: relative !important;\n overflow: hidden !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ant-checkbox::after {\n content: none !important;\n display: none !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ant-checkbox.ant-checkbox-checked {\n border-color: #007cc1 !important;\n background: #007cc1 !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ant-checkbox.ant-checkbox-checked::before {\n content: '' !important;\n position: absolute !important;\n width: 5px !important;\n height: 9px !important;\n border-right: 2px solid #ffffff !important;\n border-bottom: 2px solid #ffffff !important;\n transform: rotate(45deg) !important;\n left: 5px !important;\n top: 2px !important;\n box-sizing: border-box !important;\n display: block !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ant-checkbox.ant-checkbox-indeterminate {\n border-color: #007cc1 !important;\n background: #007cc1 !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ant-checkbox.ant-checkbox-indeterminate::before {\n content: '' !important;\n position: absolute !important;\n width: 8px !important;\n height: 2px !important;\n background: #ffffff !important;\n border-radius: 1px !important;\n left: 50% !important;\n top: 50% !important;\n transform: translate(-50%, -50%) !important;\n display: block !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ant-checkbox-input {\n width: 18px !important;\n height: 18px !important;\n min-width: 18px !important;\n min-height: 18px !important;\n position: absolute !important;\n inset: 0 !important;\n opacity: 0 !important;\n margin: 0 !important;\n cursor: pointer !important;\n z-index: 2 !important;\n border: 0 !important;\n background: transparent !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ant-checkbox-wrapper:hover .ant-checkbox,\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ant-checkbox:hover {\n border-color: #1e394e !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ant-checkbox.ant-checkbox-checked:hover,\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ant-checkbox.ant-checkbox-indeterminate:hover {\n border-color: #007cc1 !important;\n }\n\n /* Final state override: paint visual states on the native checkbox input itself. */\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ant-checkbox .ant-checkbox-input {\n appearance: none !important;\n -webkit-appearance: none !important;\n width: 18px !important;\n height: 18px !important;\n min-width: 18px !important;\n min-height: 18px !important;\n border: 1px solid #627386 !important;\n border-radius: 2px !important;\n background: #ffffff !important;\n box-sizing: border-box !important;\n opacity: 1 !important;\n position: relative !important;\n z-index: 3 !important;\n display: block !important;\n cursor: pointer !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ant-checkbox .ant-checkbox-input:checked {\n border-color: #007cc1 !important;\n background: #007cc1 !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ant-checkbox .ant-checkbox-input:checked::after {\n content: '' !important;\n position: absolute !important;\n width: 5px !important;\n height: 9px !important;\n border-right: 2px solid #ffffff !important;\n border-bottom: 2px solid #ffffff !important;\n transform: rotate(45deg) !important;\n left: 5px !important;\n top: 2px !important;\n box-sizing: border-box !important;\n display: block !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ant-checkbox .ant-checkbox-input:indeterminate {\n border-color: #007cc1 !important;\n background: #007cc1 !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ant-checkbox .ant-checkbox-input:indeterminate::after {\n content: '' !important;\n position: absolute !important;\n width: 8px !important;\n height: 2px !important;\n background: #ffffff !important;\n border-radius: 1px !important;\n left: 50% !important;\n top: 50% !important;\n transform: translate(-50%, -50%) !important;\n display: block !important;\n }\n\n /* Prevent duplicate glyphs: selected states should render a single check/dash. */\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ant-checkbox.ant-checkbox-checked::before,\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ant-checkbox.ant-checkbox-indeterminate::before {\n content: none !important;\n display: none !important;\n }\n\n /* Single glyph source: hide native/input marks and draw one mark on wrapper ::after. */\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ant-checkbox .ant-checkbox-input {\n appearance: none !important;\n -webkit-appearance: none !important;\n opacity: 0 !important;\n background: transparent !important;\n border: 0 !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ant-checkbox .ant-checkbox-input::after {\n content: none !important;\n display: none !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ant-checkbox .ant-checkbox-input:checked::after,\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ant-checkbox .ant-checkbox-input:indeterminate::after {\n content: none !important;\n display: none !important;\n border: 0 !important;\n background: transparent !important;\n box-shadow: none !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ant-checkbox.ant-checkbox-checked {\n border-color: #007cc1 !important;\n background: #007cc1 !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ant-checkbox.ant-checkbox-checked::after {\n content: '' !important;\n position: absolute !important;\n width: 5px !important;\n height: 9px !important;\n border-right: 2px solid #ffffff !important;\n border-bottom: 2px solid #ffffff !important;\n transform: rotate(45deg) !important;\n left: 5px !important;\n top: 2px !important;\n box-sizing: border-box !important;\n display: block !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ant-checkbox.ant-checkbox-indeterminate {\n border-color: #007cc1 !important;\n background: #007cc1 !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.${DS_SELECT_DROPDOWN_CHECKBOX_CLASS}.ant-select-dropdown .ant-checkbox.ant-checkbox-indeterminate::after {\n content: '' !important;\n position: absolute !important;\n width: 8px !important;\n height: 2px !important;\n background: #ffffff !important;\n border-radius: 1px !important;\n left: 50% !important;\n top: 50% !important;\n transform: translate(-50%, -50%) !important;\n display: block !important;\n }\n\n `;\n\n document.head.appendChild(style);\n};\n","import { Select as AntSelect } from 'antd';\nimport type { SelectProps } from 'antd';\nimport { useEffect, useState } from 'react';\nimport { Icon } from '../../utils/icons';\nimport { dsSemanticTokens } from '../../theme/ontadaTheme';\nimport {\n DS_SELECT_CLASS,\n DS_SELECT_FORCE_FOCUS_CLASS,\n DS_SELECT_FORCE_HOVER_CLASS,\n DS_SELECT_READONLY_CLASS,\n DS_SELECT_DROPDOWN_CLASS,\n DS_SELECT_DROPDOWN_MULTI_CLASS,\n ensureSelectStyles,\n mergeClassNames,\n} from './selectStyles';\n\nexport type DSSelectInteractionState = 'rest' | 'hover' | 'focus';\n\nexport type DSSelectProps = SelectProps & {\n readOnly?: boolean;\n interactionState?: DSSelectInteractionState;\n};\n\nexport const Select = ({\n className: providedClassName,\n popupClassName: providedPopupClassName,\n classNames: providedClassNames,\n suffixIcon,\n readOnly = false,\n interactionState = 'rest',\n open,\n onOpenChange,\n onDropdownVisibleChange,\n ...props\n}: DSSelectProps) => {\n const [isOpen, setIsOpen] = useState<boolean>(Boolean(open));\n\n useEffect(() => {\n ensureSelectStyles();\n }, []);\n\n useEffect(() => {\n if (typeof open === 'boolean') {\n setIsOpen(open);\n }\n }, [open]);\n\n const isMultiMode = props.mode === 'multiple' || props.mode === 'tags';\n const mergedSelectClassName = mergeClassNames(\n DS_SELECT_CLASS,\n interactionState === 'hover' ? DS_SELECT_FORCE_HOVER_CLASS : undefined,\n interactionState === 'focus' ? DS_SELECT_FORCE_FOCUS_CLASS : undefined,\n readOnly ? DS_SELECT_READONLY_CLASS : undefined,\n providedClassName,\n );\n const mergedPopupRootClass = mergeClassNames(\n DS_SELECT_DROPDOWN_CLASS,\n isMultiMode ? DS_SELECT_DROPDOWN_MULTI_CLASS : undefined,\n (providedClassNames as any)?.popup?.root,\n providedPopupClassName,\n );\n const resolvedOpen = readOnly ? false : open;\n\n const mergedClassNames = {\n ...(providedClassNames ?? {}),\n popup: {\n ...((providedClassNames as any)?.popup ?? {}),\n root: mergedPopupRootClass,\n },\n } as SelectProps['classNames'];\n\n const resolvedSuffixIcon = suffixIcon ?? (\n <Icon\n name={isOpen ? 'arrowButtonUp' : 'arrowButtonDown'}\n size={10}\n style={{ color: dsSemanticTokens.input.text.focus }}\n />\n );\n\n return (\n <AntSelect\n {...props}\n open={resolvedOpen}\n suffixIcon={resolvedSuffixIcon}\n className={mergedSelectClassName}\n classNames={mergedClassNames}\n onOpenChange={(nextOpen) => {\n if (readOnly && nextOpen) {\n setIsOpen(false);\n return;\n }\n setIsOpen(nextOpen);\n onOpenChange?.(nextOpen);\n onDropdownVisibleChange?.(nextOpen);\n }}\n />\n );\n};\n\nSelect.displayName = 'Select';\n","import { dsSemanticTokens } from '../../theme/ontadaTheme';\n\nconst STYLE_ID = 'ds-date-picker-styles';\n\nexport const DS_PICKER_CLASS = 'ds-date-picker';\nexport const DS_PICKER_PANEL_CLASS = 'ds-date-picker-panel';\n\nexport const mergePickerClassNames = (...classNames: Array<string | undefined>): string =>\n classNames.filter(Boolean).join(' ').trim();\n\nexport const ensureDatePickerStyles = () => {\n if (typeof document === 'undefined' || document.getElementById(STYLE_ID)) {\n return;\n }\n\n const { button, input } = dsSemanticTokens;\n const style = document.createElement('style');\n style.id = STYLE_ID;\n\n style.textContent = `\n\n /* ── Trigger: base ───────────────────────────────── */\n\n .${DS_PICKER_CLASS}.ant-picker {\n border-color: transparent !important;\n border-width: ${input.border.widthDefault} !important;\n border-style: solid !important;\n border-radius: 4px !important;\n background-color: ${input.background.default} !important;\n box-shadow: inset 0 0 0 ${input.border.widthDefault} ${input.border.default} !important;\n min-height: ${input.height.middle} !important;\n height: ${input.height.middle} !important;\n padding: 0 ${input.padding.middle.x} !important;\n display: inline-flex !important;\n align-items: center !important;\n width: 100% !important;\n }\n\n .${DS_PICKER_CLASS}.ant-picker:has(.ant-picker-input > input[readonly]:not(:disabled)) {\n background-color: ${input.background.readOnly} !important;\n border-color: transparent !important;\n box-shadow: inset 0 0 0 ${input.border.widthDefault} ${input.border.default} !important;\n }\n\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-outlined {\n border-color: transparent !important;\n box-shadow: inset 0 0 0 ${input.border.widthDefault} ${input.border.default} !important;\n }\n\n /* ── Trigger: sizes ──────────────────────────────── */\n\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-small {\n min-height: ${input.height.small} !important;\n height: ${input.height.small} !important;\n padding: 0 ${input.padding.small.x} !important;\n }\n\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-large {\n min-height: ${input.height.large} !important;\n height: ${input.height.large} !important;\n padding: 0 ${input.padding.large.x} !important;\n }\n\n /* ── Trigger: hover ──────────────────────────────── */\n\n .${DS_PICKER_CLASS}.ant-picker:not(.ant-picker-disabled):hover,\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-outlined:not(.ant-picker-disabled):hover {\n border-color: transparent !important;\n box-shadow: inset 0 0 0 ${input.border.widthDefault} ${input.border.hover} !important;\n }\n\n /* ── Trigger: focus / open ───────────────────────── */\n\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-focused,\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-outlined.ant-picker-focused {\n border-color: transparent !important;\n box-shadow: inset 0 0 0 ${input.border.widthFocus} ${input.border.focus} !important;\n }\n\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-focused:hover,\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-outlined.ant-picker-focused:hover {\n border-color: transparent !important;\n box-shadow: inset 0 0 0 ${input.border.widthFocus} ${input.border.focus} !important;\n }\n\n /* ── Trigger: status ─────────────────────────────── */\n\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-status-error,\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-outlined.ant-picker-status-error {\n border-color: transparent !important;\n box-shadow: inset 0 0 0 ${input.border.widthDefault} ${input.border.error} !important;\n }\n\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-status-warning,\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-outlined.ant-picker-status-warning {\n border-color: transparent !important;\n box-shadow: inset 0 0 0 ${input.border.widthDefault} #D3722E !important;\n }\n\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-status-success,\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-outlined.ant-picker-status-success {\n border-color: transparent !important;\n box-shadow: inset 0 0 0 ${input.border.widthDefault} ${input.border.success} !important;\n }\n\n /* ── Trigger: disabled ───────────────────────────── */\n\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-disabled {\n background-color: ${input.background.disabled} !important;\n border-color: transparent !important;\n box-shadow: none !important;\n }\n\n /* ── Input text ──────────────────────────────────── */\n\n .${DS_PICKER_CLASS}.ant-picker .ant-picker-input > input {\n font-size: 14px !important;\n line-height: 18px !important;\n font-weight: 400 !important;\n color: #181818 !important;\n }\n\n .${DS_PICKER_CLASS}.ant-picker .ant-picker-input > input::placeholder {\n color: ${input.text.placeholder} !important;\n font-weight: 400 !important;\n opacity: 1 !important;\n }\n\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-focused .ant-picker-input > input {\n color: #181818 !important;\n font-weight: ${input.focusFontWeight} !important;\n }\n\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-status-error .ant-picker-input > input {\n color: ${input.border.error} !important;\n font-weight: ${input.focusFontWeight} !important;\n }\n\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-disabled .ant-picker-input > input {\n color: ${input.text.disabled} !important;\n }\n\n .${DS_PICKER_CLASS}.ant-picker .ant-picker-input > input[readonly]:not(:disabled) {\n color: ${input.text.readOnly} !important;\n font-weight: 400 !important;\n }\n\n /* ── Suffix icon ─────────────────────────────────── */\n\n .${DS_PICKER_CLASS}.ant-picker .ant-picker-suffix,\n .${DS_PICKER_CLASS}.ant-picker .ant-picker-suffix .anticon {\n color: ${input.border.default} !important;\n font-size: 14px !important;\n }\n\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-focused .ant-picker-suffix,\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-focused .ant-picker-suffix .anticon {\n color: ${input.border.default} !important;\n }\n\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-status-error .ant-picker-suffix,\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-status-error .ant-picker-suffix .anticon {\n color: ${input.border.default} !important;\n }\n\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-disabled .ant-picker-suffix,\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-disabled .ant-picker-suffix .anticon {\n color: ${input.text.disabled} !important;\n }\n\n /* ── Clear button ────────────────────────────────── */\n\n .${DS_PICKER_CLASS}.ant-picker .ant-picker-clear {\n color: ${input.text.default} !important;\n background: ${input.background.default} !important;\n }\n\n .${DS_PICKER_CLASS}.ant-picker .ant-picker-clear:hover {\n color: ${input.text.focus} !important;\n }\n\n /* ── Calendar panel container ────────────────────── */\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-panel-container {\n border: 1px solid ${input.text.focus} !important;\n border-radius: 4px !important;\n background: ${input.background.default} !important;\n box-shadow: 0 2px 4px rgba(38, 44, 54, 0.3) !important;\n overflow: hidden !important;\n font-family: 'Nunito', 'Segoe UI', Roboto, sans-serif !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-panel {\n border: 0 !important;\n border-radius: 0 !important;\n font-family: 'Nunito', 'Segoe UI', Roboto, sans-serif !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-date-panel,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-month-panel,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-year-panel,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-quarter-panel,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-week-panel,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-decade-panel {\n width: 300px !important;\n padding: 16px !important;\n }\n\n /* ── Panel header ────────────────────────────────── */\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header {\n border-bottom: 0 !important;\n padding: 0 0 8px !important;\n color: ${input.text.focus} !important;\n display: flex !important;\n align-items: center !important;\n justify-content: flex-start !important;\n font-family: 'Nunito', 'Segoe UI', Roboto, sans-serif !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header button {\n color: ${input.text.focus} !important;\n font-size: 14px !important;\n line-height: 18px !important;\n font-family: 'Nunito', 'Segoe UI', Roboto, sans-serif !important;\n padding: 0 !important;\n margin: 0 !important;\n border: 0 !important;\n background: transparent !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header button:hover {\n color: ${input.border.focus} !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header-view {\n font-size: 16px !important;\n font-weight: 600 !important;\n line-height: 20px !important;\n font-family: 'Nunito', 'Segoe UI', Roboto, sans-serif !important;\n color: ${button.primary.default} !important;\n display: inline-flex !important;\n align-items: center !important;\n gap: 2px !important;\n order: 1 !important;\n margin-right: auto !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header-view,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header-view *,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header-view button *,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header-view button span {\n font-family: 'Nunito', 'Segoe UI', Roboto, sans-serif !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header-view button {\n color: ${button.primary.default} !important;\n font-size: 16px !important;\n font-weight: 600 !important;\n line-height: 20px !important;\n letter-spacing: ${button.typography.middle.letterSpacing} !important;\n font-family: 'Nunito', 'Segoe UI', Roboto, sans-serif !important;\n cursor: pointer !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header-view button:hover {\n color: ${button.primary.hover} !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header-view button:active,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header-view button:focus-visible {\n color: ${button.primary.pressed} !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header-super-prev-btn,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header-super-next-btn {\n display: none !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header-prev-btn,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header-next-btn {\n width: 14px !important;\n height: 14px !important;\n min-width: 14px !important;\n min-height: 14px !important;\n display: inline-flex !important;\n align-items: center !important;\n justify-content: center !important;\n color: ${input.text.focus} !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header-prev-btn,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header-next-btn {\n margin-left: 16px !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header-prev-btn {\n order: 2 !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header-next-btn {\n order: 3 !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header-prev-icon,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-header-next-icon {\n width: 14px !important;\n height: 14px !important;\n font-size: 14px !important;\n }\n\n /* ── Day-of-week header row ──────────────────────── */\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-content th {\n color: ${input.border.default} !important;\n font-size: 12px !important;\n font-weight: 600 !important;\n font-family: 'Nunito', 'Segoe UI', Roboto, sans-serif !important;\n text-transform: uppercase !important;\n letter-spacing: 0.48px !important;\n padding: 0 0 8px !important;\n }\n\n /* ── Day cells ───────────────────────────────────── */\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-body {\n padding: 0 !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-cell {\n color: #181818 !important;\n padding: 2px 0 !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-cell-in-view {\n color: #181818 !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-week-panel .ant-picker-content tr {\n display: table-row !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-week-panel .ant-picker-content td {\n display: table-cell !important;\n visibility: visible !important;\n opacity: 1 !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-cell .ant-picker-cell-inner {\n font-size: 12px !important;\n font-weight: 400 !important;\n line-height: 16px !important;\n min-width: 28px !important;\n height: 28px !important;\n border-radius: 50% !important;\n display: inline-flex !important;\n align-items: center !important;\n justify-content: center !important;\n }\n\n /* ── Cell: hover ─────────────────────────────────── */\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown\n .ant-picker-cell:not(.ant-picker-cell-selected):not(.ant-picker-cell-disabled):not(.ant-picker-cell-in-range):not(.ant-picker-cell-range-start):not(.ant-picker-cell-range-end):not(.ant-picker-cell-range-hover-start):not(.ant-picker-cell-range-hover-end):not(.ant-picker-cell-range-hover):hover\n .ant-picker-cell-inner {\n background: #e5f2fa !important;\n color: ${input.text.focus} !important;\n }\n\n /* ── Cell: today ─────────────────────────────────── */\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-cell-today .ant-picker-cell-inner {\n font-weight: 400 !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-cell-today .ant-picker-cell-inner::before {\n border: 1px solid #181818 !important;\n border-radius: 50% !important;\n }\n\n /* ── Cell: selected ──────────────────────────────── */\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-cell-selected .ant-picker-cell-inner,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-cell-selected:hover .ant-picker-cell-inner {\n background: #faf0c8 !important;\n background-color: #faf0c8 !important;\n border: 2px solid #f7c91e !important;\n color: #181818 !important;\n font-weight: 700 !important;\n border-radius: 50% !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-cell-selected .ant-picker-cell-inner::before {\n border: 0 !important;\n }\n\n /* ── Month / year panel cell selected ────────────── */\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-month-panel .ant-picker-cell-selected .ant-picker-cell-inner,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-year-panel .ant-picker-cell-selected .ant-picker-cell-inner,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-quarter-panel .ant-picker-cell-selected .ant-picker-cell-inner,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-decade-panel .ant-picker-cell-selected .ant-picker-cell-inner {\n background: #faf0c8 !important;\n background-color: #faf0c8 !important;\n border: 2px solid #f7c91e !important;\n color: #181818 !important;\n font-weight: 700 !important;\n border-radius: 16px !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-month-panel .ant-picker-cell .ant-picker-cell-inner,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-year-panel .ant-picker-cell .ant-picker-cell-inner,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-quarter-panel .ant-picker-cell .ant-picker-cell-inner,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-decade-panel .ant-picker-cell .ant-picker-cell-inner {\n font-size: 14px !important;\n line-height: 18px !important;\n font-weight: 400 !important;\n border-radius: 16px !important;\n min-width: 56px !important;\n height: 28px !important;\n padding: 0 8px !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-month-panel .ant-picker-cell-selected:hover .ant-picker-cell-inner,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-year-panel .ant-picker-cell-selected:hover .ant-picker-cell-inner,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-quarter-panel .ant-picker-cell-selected:hover .ant-picker-cell-inner,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-decade-panel .ant-picker-cell-selected:hover .ant-picker-cell-inner {\n background: #faf0c8 !important;\n background-color: #faf0c8 !important;\n border: 2px solid #f7c91e !important;\n color: #181818 !important;\n font-weight: 700 !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-week-panel .ant-picker-cell-selected::before,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-week-panel .ant-picker-cell-selected:hover::before,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-week-panel .ant-picker-cell-range-hover::before {\n background: transparent !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-week-panel .ant-picker-cell::before,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-week-panel .ant-picker-cell:hover::before,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-week-panel .ant-picker-cell-in-view.ant-picker-cell-in-range::before,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-week-panel .ant-picker-cell-in-view.ant-picker-cell-range-hover::before {\n background: transparent !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-week-panel .ant-picker-cell-selected .ant-picker-cell-inner,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-week-panel .ant-picker-cell-selected:hover .ant-picker-cell-inner {\n background: #faf0c8 !important;\n background-color: #faf0c8 !important;\n border: 2px solid #f7c91e !important;\n color: #181818 !important;\n font-weight: 700 !important;\n border-radius: 50% !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-week-panel .ant-picker-cell-selected:hover .ant-picker-cell-inner {\n background: #faf0c8 !important;\n background-color: #faf0c8 !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-week-panel .ant-picker-cell-selected .ant-picker-cell-inner::before,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-week-panel .ant-picker-cell-selected:hover .ant-picker-cell-inner::before {\n border: 0 !important;\n background: transparent !important;\n }\n\n /* ── Footer ──────────────────────────────────────── */\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-footer {\n display: none !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-today-btn {\n color: ${input.border.focus} !important;\n font-size: 14px !important;\n font-weight: 400 !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-today-btn:hover {\n color: #00669e !important;\n }\n\n /* ── Range picker ────────────────────────────────── */\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-cell-in-range .ant-picker-cell-inner {\n background: #faf5e2 !important;\n color: #181818 !important;\n border-radius: 0 !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-cell-in-range::before,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-cell-range-start::before,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-cell-range-end::before {\n background: #faf5e2 !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-cell-range-start .ant-picker-cell-inner,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-cell-range-end .ant-picker-cell-inner {\n background: #faf0c8 !important;\n border: 2px solid #f7c91e !important;\n color: #181818 !important;\n font-weight: 700 !important;\n border-radius: 50% !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-cell-range-start:hover .ant-picker-cell-inner,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-cell-range-end:hover .ant-picker-cell-inner,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-cell-range-start.ant-picker-cell-range-hover-start .ant-picker-cell-inner,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-cell-range-end.ant-picker-cell-range-hover-end .ant-picker-cell-inner {\n background: #faf0c8 !important;\n border: 2px solid #f7c91e !important;\n color: #181818 !important;\n font-weight: 700 !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-cell-range-hover-start .ant-picker-cell-inner,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-cell-range-hover-end .ant-picker-cell-inner,\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-cell-range-hover .ant-picker-cell-inner {\n background: #faf5e2 !important;\n }\n\n `;\n\n document.head.appendChild(style);\n};\n","import { DatePicker as AntDatePicker } from 'antd';\nimport type { DatePickerProps } from 'antd';\nimport { useEffect } from 'react';\nimport type { ComponentProps } from 'react';\nimport {\n DS_PICKER_CLASS,\n DS_PICKER_PANEL_CLASS,\n ensureDatePickerStyles,\n mergePickerClassNames,\n} from './datePickerStyles';\n\nexport type DSDatePickerProps = DatePickerProps;\nexport const DS_DATE_FORMAT = 'MM-DD-YYYY';\n\ntype DSRangePickerProps = ComponentProps<typeof AntDatePicker.RangePicker>;\n\nexport const DatePicker = ({\n className: providedClassName,\n popupClassName: providedPopupClassName,\n classNames: providedClassNames,\n ...props\n}: DSDatePickerProps) => {\n useEffect(() => {\n ensureDatePickerStyles();\n }, []);\n\n const mergedClassName = mergePickerClassNames(DS_PICKER_CLASS, providedClassName);\n const mergedPopupRootClassName = mergePickerClassNames(\n DS_PICKER_PANEL_CLASS,\n (providedClassNames as any)?.popup?.root,\n providedPopupClassName,\n );\n\n const mergedClassNames = {\n ...(providedClassNames ?? {}),\n popup: {\n ...((providedClassNames as any)?.popup ?? {}),\n root: mergedPopupRootClassName,\n },\n } as DatePickerProps['classNames'];\n\n const resolvedFormat = props.format ?? DS_DATE_FORMAT;\n const resolvedPlaceholder = props.placeholder ?? DS_DATE_FORMAT;\n\n return (\n <AntDatePicker\n {...props}\n format={resolvedFormat}\n placeholder={resolvedPlaceholder}\n className={mergedClassName}\n popupClassName={mergedPopupRootClassName}\n classNames={mergedClassNames}\n />\n );\n};\n\nDatePicker.displayName = 'DatePicker';\n\nconst DSRangePicker = ({\n className: providedClassName,\n popupClassName: providedPopupClassName,\n classNames: providedClassNames,\n ...props\n}: DSRangePickerProps) => {\n useEffect(() => {\n ensureDatePickerStyles();\n }, []);\n\n const mergedClassName = mergePickerClassNames(DS_PICKER_CLASS, providedClassName);\n const mergedPopupRootClassName = mergePickerClassNames(\n DS_PICKER_PANEL_CLASS,\n (providedClassNames as any)?.popup?.root,\n providedPopupClassName,\n );\n\n const mergedClassNames = {\n ...(providedClassNames ?? {}),\n popup: {\n ...((providedClassNames as any)?.popup ?? {}),\n root: mergedPopupRootClassName,\n },\n } as DSRangePickerProps['classNames'];\n\n const resolvedFormat = props.format ?? DS_DATE_FORMAT;\n const resolvedPlaceholder = props.placeholder ?? [DS_DATE_FORMAT, DS_DATE_FORMAT];\n\n return (\n <AntDatePicker.RangePicker\n {...props}\n format={resolvedFormat}\n placeholder={resolvedPlaceholder}\n className={mergedClassName}\n popupClassName={mergedPopupRootClassName}\n classNames={mergedClassNames}\n />\n );\n};\n\nDSRangePicker.displayName = 'DatePicker.RangePicker';\n\n// Forward DS-wrapped sub-component so callers can do const { RangePicker } = DSDatePicker\n(DatePicker as typeof DatePicker & { RangePicker: typeof DSRangePicker }).RangePicker = DSRangePicker;\n","import { appTheme, dsSemanticTokens } from '../../theme/ontadaTheme';\n\nconst STYLE_ID = 'ds-time-picker-styles';\n\nexport const DS_TIME_PICKER_CLASS = 'ds-time-picker';\nexport const DS_TIME_PICKER_PANEL_CLASS = 'ds-time-picker-panel';\n\nexport const mergeTimePickerClassNames = (...classNames: Array<string | undefined>): string =>\n classNames.filter(Boolean).join(' ').trim();\n\nexport const ensureTimePickerStyles = () => {\n if (typeof document === 'undefined' || document.getElementById(STYLE_ID)) {\n return;\n }\n\n const { input, picker } = dsSemanticTokens;\n const antTokens = appTheme.token ?? {};\n const textColor = String(antTokens.colorText);\n const warningColor = String(antTokens.colorWarning);\n const selectedBackground = picker.selected.background;\n const selectedBorder = picker.selected.border;\n const selectedText = picker.selected.text;\n const panelShadowColor = input.text.focus;\n const panelShadowBlendColor = input.background.default;\n const style = document.createElement('style');\n style.id = STYLE_ID;\n\n style.textContent = `\n /* TimePicker trigger: base */\n\n .${DS_TIME_PICKER_CLASS}.ant-picker {\n border-color: ${input.border.default} !important;\n border-width: ${input.border.widthDefault} !important;\n border-style: solid !important;\n border-radius: 4px !important;\n background-color: ${input.background.default} !important;\n box-shadow: inset 0 0 0 ${input.border.widthDefault} ${input.border.default} !important;\n min-height: ${input.height.middle} !important;\n height: ${input.height.middle} !important;\n padding: 0 ${input.padding.middle.x} !important;\n display: inline-flex !important;\n align-items: center !important;\n color: ${input.text.default} !important;\n font-family: 'Nunito', 'Segoe UI', Roboto, sans-serif !important;\n font-size: 14px !important;\n line-height: 1.5 !important;\n transition: all 0.2s ease !important;\n }\n\n .${DS_TIME_PICKER_CLASS}.ant-picker.ant-picker-outlined {\n border-color: ${input.border.default} !important;\n box-shadow: inset 0 0 0 ${input.border.widthDefault} ${input.border.default} !important;\n }\n\n .${DS_TIME_PICKER_CLASS}.ant-picker.ant-picker-small {\n min-height: ${input.height.small} !important;\n height: ${input.height.small} !important;\n padding: 0 ${input.padding.small.x} !important;\n }\n\n .${DS_TIME_PICKER_CLASS}.ant-picker.ant-picker-large {\n min-height: ${input.height.large} !important;\n height: ${input.height.large} !important;\n padding: 0 ${input.padding.large.x} !important;\n }\n\n /* Trigger: hover */\n\n .${DS_TIME_PICKER_CLASS}.ant-picker:not(.ant-picker-disabled):hover,\n .${DS_TIME_PICKER_CLASS}.ant-picker.ant-picker-outlined:not(.ant-picker-disabled):hover {\n border-color: ${input.border.hover} !important;\n box-shadow: inset 0 0 0 ${input.border.widthDefault} ${input.border.hover} !important;\n }\n\n /* Trigger: focus / open */\n\n .${DS_TIME_PICKER_CLASS}.ant-picker.ant-picker-focused,\n .${DS_TIME_PICKER_CLASS}.ant-picker.ant-picker-outlined.ant-picker-focused {\n border-color: ${input.border.focus} !important;\n box-shadow: inset 0 0 0 ${input.border.widthFocus} ${input.border.focus} !important;\n background-color: ${input.background.focus} !important;\n }\n\n .${DS_TIME_PICKER_CLASS}.ant-picker.ant-picker-focused:hover,\n .${DS_TIME_PICKER_CLASS}.ant-picker.ant-picker-outlined.ant-picker-focused:hover {\n border-color: ${input.border.focus} !important;\n box-shadow: inset 0 0 0 ${input.border.widthFocus} ${input.border.focus} !important;\n }\n\n /* Trigger: status */\n\n .${DS_TIME_PICKER_CLASS}.ant-picker.ant-picker-status-error,\n .${DS_TIME_PICKER_CLASS}.ant-picker.ant-picker-outlined.ant-picker-status-error {\n border-color: ${input.border.error} !important;\n box-shadow: inset 0 0 0 ${input.border.widthDefault} ${input.border.error} !important;\n }\n\n .${DS_TIME_PICKER_CLASS}.ant-picker.ant-picker-status-warning,\n .${DS_TIME_PICKER_CLASS}.ant-picker.ant-picker-outlined.ant-picker-status-warning {\n border-color: ${warningColor} !important;\n box-shadow: inset 0 0 0 ${input.border.widthDefault} ${warningColor} !important;\n }\n\n .${DS_TIME_PICKER_CLASS}.ant-picker.ant-picker-status-success,\n .${DS_TIME_PICKER_CLASS}.ant-picker.ant-picker-outlined.ant-picker-status-success {\n border-color: ${input.border.success} !important;\n box-shadow: inset 0 0 0 ${input.border.widthDefault} ${input.border.success} !important;\n }\n\n /* Trigger: disabled */\n\n .${DS_TIME_PICKER_CLASS}.ant-picker.ant-picker-disabled {\n border-color: ${input.text.disabled} !important;\n background-color: ${input.background.disabled} !important;\n box-shadow: inset 0 0 0 ${input.border.widthDefault} ${input.text.disabled} !important;\n color: ${input.text.disabled} !important;\n }\n\n .${DS_TIME_PICKER_CLASS}.ant-picker .ant-picker-input > input {\n font-size: 14px !important;\n line-height: 18px !important;\n font-weight: 400 !important;\n color: ${textColor} !important;\n }\n\n .${DS_TIME_PICKER_CLASS}.ant-picker .ant-picker-input > input::placeholder {\n color: ${input.text.placeholder} !important;\n font-weight: 400 !important;\n opacity: 1 !important;\n }\n\n .${DS_TIME_PICKER_CLASS}.ant-picker.ant-picker-disabled input {\n color: ${input.text.disabled} !important;\n }\n\n /* Clear button */\n\n .${DS_TIME_PICKER_CLASS}.ant-picker .ant-picker-clear {\n color: ${input.text.default} !important;\n background: ${input.background.default} !important;\n }\n\n .${DS_TIME_PICKER_CLASS}.ant-picker .ant-picker-clear:hover {\n color: ${input.text.focus} !important;\n }\n\n /* Panel container */\n\n .${DS_TIME_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-panel-container {\n border: 1px solid ${input.text.focus} !important;\n border-radius: 4px !important;\n background: ${input.background.default} !important;\n box-shadow: 0 2px 4px color-mix(in srgb, ${panelShadowColor} 30%, ${panelShadowBlendColor}) !important;\n overflow: hidden !important;\n font-family: 'Nunito', 'Segoe UI', Roboto, sans-serif !important;\n }\n\n /* Panel body */\n\n .${DS_TIME_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-panel {\n border: 0 !important;\n border-radius: 0 !important;\n background: ${input.background.default} !important;\n font-family: 'Nunito', 'Segoe UI', Roboto, sans-serif !important;\n }\n\n .${DS_TIME_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-time-panel {\n width: 232px !important;\n padding: 8px !important;\n }\n\n /* Time columns */\n\n .${DS_TIME_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-time-panel-column {\n padding: 0 !important;\n width: 64px !important;\n min-width: 64px !important;\n }\n\n .${DS_TIME_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-time-panel-column li {\n color: ${input.text.default} !important;\n line-height: 32px !important;\n padding-inline: 4px !important;\n }\n\n .${DS_TIME_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-time-panel-column li .ant-picker-time-panel-cell-inner {\n box-sizing: border-box !important;\n width: calc(100% - 8px) !important;\n min-width: 40px !important;\n margin-inline: 4px !important;\n text-align: center !important;\n }\n\n .${DS_TIME_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-time-panel-column li:hover {\n background: ${input.background.focus} !important;\n }\n\n .${DS_TIME_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-time-panel-column li.ant-picker-time-panel-cell-selected,\n .${DS_TIME_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-time-panel-column li.ant-picker-time-panel-cell-selected:hover {\n background: none !important;\n background-color: unset !important;\n background-image: none !important;\n color: ${selectedText} !important;\n font-weight: 700 !important;\n opacity: 1 !important;\n }\n\n .${DS_TIME_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-time-panel-column li.ant-picker-time-panel-cell-selected .ant-picker-time-panel-cell-inner,\n .${DS_TIME_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-time-panel-column li.ant-picker-time-panel-cell-selected:hover .ant-picker-time-panel-cell-inner {\n background: ${selectedBackground} !important;\n background-color: ${selectedBackground} !important;\n background-image: none !important;\n border: 0 !important;\n box-shadow: inset 0 0 0 ${input.border.widthDefault} ${selectedBorder} !important;\n color: ${selectedText} !important;\n font-weight: 700 !important;\n opacity: 1 !important;\n }\n\n .${DS_TIME_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-time-panel-column li.ant-picker-time-panel-cell-selected::before,\n .${DS_TIME_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-time-panel-column li.ant-picker-time-panel-cell-selected .ant-picker-time-panel-cell-inner::before {\n background: ${selectedBackground} !important;\n background-color: ${selectedBackground} !important;\n background-image: none !important;\n border: 0 !important;\n box-shadow: none !important;\n }\n\n .${DS_TIME_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-ok {\n float: right !important;\n }\n `;\n\n document.head.appendChild(style);\n};\n","import { TimePicker as AntTimePicker } from 'antd';\nimport type { TimePickerProps } from 'antd';\nimport { useEffect } from 'react';\nimport {\n DS_TIME_PICKER_CLASS,\n DS_TIME_PICKER_PANEL_CLASS,\n ensureTimePickerStyles,\n mergeTimePickerClassNames,\n} from './timePickerStyles';\n\nexport type DSTimePickerFormat = '24h' | '12h';\n\nexport type DSTimePickerProps = TimePickerProps & {\n /**\n * DS time format variant.\n * 24h: 24-hour format (HH:mm:ss).\n * 12h: 12-hour format with AM/PM (h:mm A).\n */\n dsFormat?: DSTimePickerFormat;\n};\n\nexport const TimePicker = ({\n className: providedClassName,\n popupClassName: providedPopupClassName,\n dsFormat = '24h',\n use12Hours: provided12Hours,\n format: providedFormat,\n ...props\n}: DSTimePickerProps) => {\n useEffect(() => {\n ensureTimePickerStyles();\n }, []);\n\n const use12Hours = dsFormat === '12h' || provided12Hours;\n const finalFormat = dsFormat === '12h' ? (providedFormat ?? 'h:mm A') : (providedFormat ?? 'HH:mm:ss');\n const mergedClassName = mergeTimePickerClassNames(DS_TIME_PICKER_CLASS, providedClassName);\n const mergedPopupClassName = mergeTimePickerClassNames(\n DS_TIME_PICKER_PANEL_CLASS,\n providedPopupClassName,\n );\n\n return (\n <AntTimePicker\n {...props}\n className={mergedClassName}\n popupClassName={mergedPopupClassName}\n use12Hours={use12Hours}\n format={finalFormat}\n />\n );\n};\n\nTimePicker.displayName = 'TimePicker';\n","import { Input as AntInput } from 'antd';\nimport type { InputProps as AntInputProps } from 'antd';\nimport { useEffect } from 'react';\nimport { dsSemanticTokens } from '../../theme/ontadaTheme';\n\nconst STYLE_ID = 'ds-input-styles';\n\nexport type InputProps = AntInputProps;\n\nexport const Input = ({ className = '', ...props }: InputProps) => {\n useEffect(() => {\n if (typeof document !== 'undefined' && !document.getElementById(STYLE_ID)) {\n const style = document.createElement('style');\n style.id = STYLE_ID;\n const { input } = dsSemanticTokens;\n\n style.textContent = `\n .ds-input.ant-input,\n .ds-input.ant-input-affix-wrapper,\n .ds-input.ant-input-filled,\n .ds-input.ant-input-affix-wrapper.ant-input-affix-wrapper-filled,\n .ds-input.ant-input-outlined,\n .ds-input.ant-input-affix-wrapper.ant-input-outlined {\n border-color: ${input.border.default} !important;\n border-width: ${input.border.widthDefault} !important;\n border-style: solid !important;\n background-color: ${input.background.default} !important;\n color: ${input.text.default} !important;\n transition: border-color 120ms ease, box-shadow 120ms ease;\n }\n\n .ds-input.ant-input::placeholder,\n .ds-input .ant-input::placeholder {\n color: ${input.text.placeholder} !important;\n opacity: 1;\n }\n\n .ds-input.ant-input:hover,\n .ds-input.ant-input-affix-wrapper:hover,\n .ds-input.ant-input-filled:hover,\n .ds-input.ant-input-affix-wrapper.ant-input-affix-wrapper-filled:hover,\n .ds-input.ant-input-outlined:hover,\n .ds-input.ant-input-affix-wrapper.ant-input-outlined:hover {\n border-color: ${input.border.hover} !important;\n }\n\n .ds-input.ant-input-filled,\n .ds-input.ant-input-affix-wrapper.ant-input-affix-wrapper-filled {\n background-color: ${input.background.readOnly} !important;\n }\n\n .ds-input.ant-input-affix-wrapper.ant-input-affix-wrapper-filled .ant-input {\n background-color: transparent !important;\n }\n\n .ds-input.ant-input:focus,\n .ds-input.ant-input-focused,\n .ds-input.ant-input-affix-wrapper-focused,\n .ds-input.ant-input-affix-wrapper:focus-within {\n border-color: ${input.border.focus} !important;\n border-width: ${input.border.widthFocus} !important;\n box-shadow: none !important;\n color: ${input.text.focus} !important;\n font-weight: ${input.focusFontWeight} !important;\n }\n\n .ds-input.ant-input:focus::placeholder,\n .ds-input.ant-input-focused::placeholder,\n .ds-input.ant-input-affix-wrapper-focused .ant-input::placeholder,\n .ds-input.ant-input-affix-wrapper:focus-within .ant-input::placeholder {\n color: ${input.text.focus} !important;\n }\n\n .ds-input.ant-input-status-error,\n .ds-input.ant-input-affix-wrapper-status-error {\n border-color: ${input.border.error} !important;\n }\n\n .ds-input.ant-input-status-success,\n .ds-input.ant-input-affix-wrapper-status-success {\n border-color: ${input.border.success} !important;\n }\n\n .ds-input.ant-input-disabled,\n .ds-input.ant-input-affix-wrapper-disabled,\n .ds-input.ant-input[disabled],\n .ds-input.ant-input-affix-wrapper[disabled],\n .ds-input.ant-input-affix-wrapper-disabled .ant-input {\n background-color: ${input.background.disabled} !important;\n border-color: transparent !important;\n color: ${input.text.disabled} !important;\n -webkit-text-fill-color: ${input.text.disabled} !important;\n }\n\n .ds-input.ant-input[readonly],\n .ds-input.ant-input-affix-wrapper:has(.ant-input[readonly]),\n .ds-input.ant-input-affix-wrapper-readonly {\n background-color: ${input.background.readOnly} !important;\n border-color: ${input.border.default} !important;\n color: ${input.text.readOnly} !important;\n }\n\n .ds-input.ant-input[readonly]::placeholder,\n .ds-input.ant-input-affix-wrapper:has(.ant-input[readonly]) .ant-input::placeholder,\n .ds-input.ant-input-affix-wrapper-readonly .ant-input::placeholder {\n color: ${input.text.placeholder} !important;\n }\n\n .ds-input.ant-input-sm,\n .ds-input.ant-input-affix-wrapper-sm {\n height: ${input.height.small} !important;\n min-height: ${input.height.small} !important;\n padding: ${input.padding.small.y} ${input.padding.small.x} !important;\n }\n\n .ds-input.ant-input,\n .ds-input.ant-input-affix-wrapper {\n height: ${input.height.middle} !important;\n min-height: ${input.height.middle} !important;\n padding: ${input.padding.middle.y} ${input.padding.middle.x} !important;\n }\n\n .ds-input.ant-input-lg,\n .ds-input.ant-input-affix-wrapper-lg {\n height: ${input.height.large} !important;\n min-height: ${input.height.large} !important;\n padding: ${input.padding.large.y} ${input.padding.large.x} !important;\n }\n\n .ds-input.ant-input-affix-wrapper .ant-input {\n padding: 0 !important;\n height: auto !important;\n min-height: 0 !important;\n }\n `;\n\n document.head.appendChild(style);\n }\n }, []);\n\n const mergedClassName = `ds-input ${className}`.trim();\n\n return <AntInput {...props} className={mergedClassName} />;\n};\n\nInput.displayName = 'Input';","import { Checkbox as AntCheckbox } from 'antd';\nimport type { CheckboxProps as AntCheckboxProps } from 'antd';\nimport { useEffect } from 'react';\nimport { dsSemanticTokens } from '../../theme/ontadaTheme';\n\nexport type DSCheckboxSize = 'sm' | 'md' | 'lg';\nexport type DSCheckboxStatus = 'default' | 'error';\n\nexport type CheckboxProps = AntCheckboxProps & {\n dsSize?: DSCheckboxSize;\n dsStatus?: DSCheckboxStatus;\n};\n\nconst STYLE_ID = 'ds-checkbox-styles';\n\nexport const Checkbox = ({\n dsSize = 'md',\n dsStatus = 'default',\n className = '',\n ...props\n}: CheckboxProps) => {\n useEffect(() => {\n if (typeof document !== 'undefined') {\n let style = document.getElementById(STYLE_ID) as HTMLStyleElement | null;\n if (!style) {\n style = document.createElement('style');\n style.id = STYLE_ID;\n document.head.appendChild(style);\n }\n const { checkbox } = dsSemanticTokens;\n\n style.textContent = `\n .ds-checkbox.ant-checkbox-wrapper {\n align-items: center;\n }\n\n .ds-checkbox .ant-checkbox {\n top: 0;\n }\n\n .ds-checkbox .ant-checkbox .ant-checkbox-inner {\n border-radius: ${checkbox.radius}px;\n border-color: ${checkbox.border.default};\n border-width: ${checkbox.borderWidth.default}px;\n background-color: ${checkbox.background.default};\n }\n\n .ds-checkbox .ant-checkbox-input:focus-visible + .ant-checkbox-inner {\n outline: 2px solid ${checkbox.border.hover};\n outline-offset: 2px;\n }\n\n .ds-checkbox.ant-checkbox-wrapper:hover .ant-checkbox:not(.ant-checkbox-checked):not(.ant-checkbox-disabled) .ant-checkbox-inner,\n .ds-checkbox .ant-checkbox:hover:not(.ant-checkbox-checked):not(.ant-checkbox-disabled) .ant-checkbox-inner {\n border-color: ${checkbox.border.hover};\n border-width: ${checkbox.borderWidth.hover}px;\n background-color: ${checkbox.background.default};\n }\n\n .ds-checkbox .ant-checkbox.ant-checkbox-checked .ant-checkbox-inner {\n border-color: ${checkbox.border.checked};\n background-color: ${checkbox.background.checked};\n }\n\n .ds-checkbox .ant-checkbox.ant-checkbox-checked .ant-checkbox-inner::after {\n border-color: ${checkbox.mark.checked};\n }\n\n .ds-checkbox .ant-checkbox.ant-checkbox-indeterminate .ant-checkbox-inner {\n border-color: ${checkbox.border.checked} !important;\n background-color: ${checkbox.background.checked} !important;\n }\n\n .ds-checkbox .ant-checkbox.ant-checkbox-indeterminate .ant-checkbox-inner::after {\n content: '';\n position: absolute;\n inset-inline-start: 50%;\n top: 50%;\n margin: 0;\n background-color: ${checkbox.mark.indeterminate} !important;\n border: none !important;\n border-radius: 1px;\n transform: translate(-50%, -50%) !important;\n opacity: 1;\n }\n\n .ds-checkbox .ant-checkbox.ant-checkbox-indeterminate.ant-checkbox-disabled .ant-checkbox-inner::after,\n .ds-checkbox.ant-checkbox-wrapper-disabled .ant-checkbox.ant-checkbox-indeterminate .ant-checkbox-inner::after {\n background-color: ${checkbox.mark.indeterminate} !important;\n }\n\n .ds-checkbox.ds-checkbox-status-error .ant-checkbox:not(.ant-checkbox-checked):not(.ant-checkbox-indeterminate):not(.ant-checkbox-disabled) .ant-checkbox-inner {\n border-color: ${checkbox.border.error};\n }\n\n .ds-checkbox.ds-checkbox-status-error.ant-checkbox-wrapper:hover .ant-checkbox:not(.ant-checkbox-checked):not(.ant-checkbox-indeterminate):not(.ant-checkbox-disabled) .ant-checkbox-inner,\n .ds-checkbox.ds-checkbox-status-error .ant-checkbox:hover:not(.ant-checkbox-checked):not(.ant-checkbox-indeterminate):not(.ant-checkbox-disabled) .ant-checkbox-inner {\n border-color: ${checkbox.border.errorHover};\n border-width: ${checkbox.borderWidth.hover}px;\n }\n\n .ds-checkbox.ds-checkbox-status-error .ant-checkbox.ant-checkbox-checked .ant-checkbox-inner,\n .ds-checkbox.ds-checkbox-status-error .ant-checkbox.ant-checkbox-indeterminate .ant-checkbox-inner {\n border-color: ${checkbox.border.error};\n background-color: ${checkbox.background.errorChecked};\n }\n\n .ds-checkbox.ds-checkbox-status-error.ant-checkbox-wrapper:hover .ant-checkbox.ant-checkbox-checked .ant-checkbox-inner,\n .ds-checkbox.ds-checkbox-status-error.ant-checkbox-wrapper:hover .ant-checkbox.ant-checkbox-indeterminate .ant-checkbox-inner,\n .ds-checkbox.ds-checkbox-status-error .ant-checkbox.ant-checkbox-checked:hover .ant-checkbox-inner,\n .ds-checkbox.ds-checkbox-status-error .ant-checkbox.ant-checkbox-indeterminate:hover .ant-checkbox-inner {\n border-color: ${checkbox.border.errorHover};\n background-color: ${checkbox.border.errorHover};\n }\n\n .ds-checkbox .ant-checkbox.ant-checkbox-disabled .ant-checkbox-inner,\n .ds-checkbox.ant-checkbox-wrapper-disabled .ant-checkbox .ant-checkbox-inner {\n background-color: ${checkbox.background.disabled};\n border-color: transparent;\n }\n\n .ds-checkbox .ant-checkbox.ant-checkbox-disabled.ant-checkbox-checked .ant-checkbox-inner::after,\n .ds-checkbox .ant-checkbox.ant-checkbox-disabled.ant-checkbox-indeterminate .ant-checkbox-inner::after {\n border-color: ${checkbox.mark.checked};\n border-width: 0;\n background-color: ${checkbox.mark.indeterminate};\n opacity: 0.95;\n }\n\n .ds-checkbox.ds-checkbox-size-sm .ant-checkbox .ant-checkbox-inner {\n width: ${checkbox.size.sm}px;\n height: ${checkbox.size.sm}px;\n }\n\n .ds-checkbox.ds-checkbox-size-sm .ant-checkbox.ant-checkbox-checked .ant-checkbox-inner::after {\n inset-inline-start: 4px;\n top: 1px;\n width: 5px;\n height: 9px;\n }\n\n .ds-checkbox.ds-checkbox-size-sm .ant-checkbox.ant-checkbox-indeterminate .ant-checkbox-inner::after {\n width: ${checkbox.indeterminate.sm.width}px !important;\n height: ${checkbox.indeterminate.sm.height}px !important;\n }\n\n .ds-checkbox.ds-checkbox-size-md .ant-checkbox .ant-checkbox-inner {\n width: ${checkbox.size.md}px;\n height: ${checkbox.size.md}px;\n }\n\n .ds-checkbox.ds-checkbox-size-md .ant-checkbox.ant-checkbox-checked .ant-checkbox-inner::after {\n inset-inline-start: 5px;\n top: 1px;\n width: 6px;\n height: 10px;\n }\n\n .ds-checkbox.ds-checkbox-size-md .ant-checkbox.ant-checkbox-indeterminate .ant-checkbox-inner::after {\n width: ${checkbox.indeterminate.md.width}px !important;\n height: ${checkbox.indeterminate.md.height}px !important;\n }\n\n .ds-checkbox.ds-checkbox-size-lg .ant-checkbox .ant-checkbox-inner {\n width: ${checkbox.size.lg}px;\n height: ${checkbox.size.lg}px;\n }\n\n .ds-checkbox.ds-checkbox-size-lg .ant-checkbox.ant-checkbox-checked .ant-checkbox-inner::after {\n inset-inline-start: 6px;\n top: 2px;\n width: 7px;\n height: 11px;\n }\n\n .ds-checkbox.ds-checkbox-size-lg .ant-checkbox.ant-checkbox-indeterminate .ant-checkbox-inner::after {\n width: ${checkbox.indeterminate.lg.width}px !important;\n height: ${checkbox.indeterminate.lg.height}px !important;\n }\n\n /* Ant v6 checkbox visuals are rendered on .ant-checkbox and its ::after */\n .ds-checkbox .ant-checkbox {\n width: ${checkbox.size.md}px;\n height: ${checkbox.size.md}px;\n border-radius: ${checkbox.radius}px;\n border: ${checkbox.borderWidth.default}px solid ${checkbox.border.default};\n background-color: ${checkbox.background.default};\n box-sizing: border-box;\n }\n\n .ds-checkbox.ds-checkbox-size-sm .ant-checkbox {\n width: ${checkbox.size.sm}px;\n height: ${checkbox.size.sm}px;\n }\n\n .ds-checkbox.ds-checkbox-size-lg .ant-checkbox {\n width: ${checkbox.size.lg}px;\n height: ${checkbox.size.lg}px;\n }\n\n .ds-checkbox.ant-checkbox-wrapper:hover .ant-checkbox:not(.ant-checkbox-checked):not(.ant-checkbox-indeterminate):not(.ant-checkbox-disabled),\n .ds-checkbox .ant-checkbox:hover:not(.ant-checkbox-checked):not(.ant-checkbox-indeterminate):not(.ant-checkbox-disabled) {\n border-color: ${checkbox.border.hover} !important;\n border-width: ${checkbox.borderWidth.hover}px !important;\n background-color: ${checkbox.background.default} !important;\n }\n\n .ds-checkbox .ant-checkbox.ant-checkbox-indeterminate {\n border-color: ${checkbox.border.checked} !important;\n background-color: ${checkbox.background.checked} !important;\n }\n\n .ds-checkbox .ant-checkbox.ant-checkbox-indeterminate::after {\n content: '' !important;\n position: absolute !important;\n left: 50% !important;\n top: 50% !important;\n margin: 0 !important;\n border: 0 !important;\n border-radius: 1px !important;\n background: ${checkbox.mark.indeterminate} !important;\n transform: translate(-50%, -50%) !important;\n opacity: 1 !important;\n }\n\n .ds-checkbox.ds-checkbox-size-sm .ant-checkbox.ant-checkbox-indeterminate::after {\n width: ${checkbox.indeterminate.sm.width}px !important;\n height: ${checkbox.indeterminate.sm.height}px !important;\n }\n\n .ds-checkbox.ds-checkbox-size-md .ant-checkbox.ant-checkbox-indeterminate::after {\n width: ${checkbox.indeterminate.md.width}px !important;\n height: ${checkbox.indeterminate.md.height}px !important;\n }\n\n .ds-checkbox.ds-checkbox-size-lg .ant-checkbox.ant-checkbox-indeterminate::after {\n width: ${checkbox.indeterminate.lg.width}px !important;\n height: ${checkbox.indeterminate.lg.height}px !important;\n }\n `;\n }\n }, []);\n\n const mergedClassName = `ds-checkbox ds-checkbox-size-${dsSize} ds-checkbox-status-${dsStatus} ${className}`.trim();\n\n return <AntCheckbox {...props} className={mergedClassName} />;\n};\n\nCheckbox.displayName = 'Checkbox';\nCheckbox.Group = AntCheckbox.Group;","import { Switch as AntSwitch } from 'antd';\nimport type { SwitchProps as AntSwitchProps } from 'antd';\nimport { useId } from 'react';\nimport { useEffect } from 'react';\nimport type { CSSProperties, ReactNode } from 'react';\nimport { dsSemanticTokens } from '../../theme/ontadaTheme';\n\nexport type DSSwitchLabelPosition = 'left' | 'right';\nexport type DSSwitchSize = 'sm' | 'md' | 'lg';\nexport type DSSwitchState = 'normal' | 'hover' | 'focus' | 'pressed';\n\nexport type SwitchProps = AntSwitchProps & {\n /** Optional DS label rendered alongside the switch control. */\n dsLabel?: ReactNode;\n /** DS label placement around the switch control. */\n dsLabelPosition?: DSSwitchLabelPosition;\n /** DS switch size variant from Figma. */\n dsSize?: DSSwitchSize;\n /** DS visual state variant from Figma. */\n dsState?: DSSwitchState;\n /** Show icon labels inside the switch track. */\n dsShowIcon?: boolean;\n /** Optional helper description rendered below the label. */\n dsShowSubLabel?: boolean;\n dsDescription?: ReactNode;\n};\n\nconst STYLE_ID = 'ds-switch-styles';\n\nfunction injectStyles() {\n if (typeof document === 'undefined') return;\n let style = document.getElementById(STYLE_ID) as HTMLStyleElement | null;\n if (!style) {\n style = document.createElement('style');\n style.id = STYLE_ID;\n document.head.appendChild(style);\n }\n\n const switchOn = dsSemanticTokens.button.primary.default;\n const switchOnHover = dsSemanticTokens.button.primary.hover;\n const switchOnPressed = dsSemanticTokens.button.primary.pressed;\n const switchOnDisabled = dsSemanticTokens.button.primary.disabledBg;\n const switchOff = dsSemanticTokens.table.text.body;\n const switchOffHover = dsSemanticTokens.table.text.header;\n const switchOffPressed = dsSemanticTokens.pagination.text.hover;\n const switchOffDisabled = dsSemanticTokens.checkbox.background.disabled;\n const thumb = dsSemanticTokens.checkbox.background.default;\n const focusOutline = dsSemanticTokens.modal.closeButton.focusOutline;\n const iconOn = dsSemanticTokens.button.primary.text;\n const iconOff = dsSemanticTokens.button.primary.default;\n const iconDisabled = dsSemanticTokens.button.primary.disabledText;\n\n style.textContent = `\n .ant-switch.ds-switch {\n background: ${switchOff};\n box-shadow: none;\n transition: none;\n }\n\n .ant-switch.ds-switch.ant-switch-checked {\n background: ${switchOn};\n }\n\n .ant-switch.ds-switch.ds-switch-size-sm {\n min-width: 28px;\n height: 16px;\n line-height: 16px;\n }\n\n .ant-switch.ds-switch.ds-switch-size-sm .ant-switch-handle {\n width: 12px;\n height: 12px;\n top: 2px;\n inset-inline-start: 2px;\n }\n\n .ant-switch.ds-switch.ds-switch-size-sm.ant-switch-checked .ant-switch-handle {\n inset-inline-start: calc(100% - 14px);\n }\n\n .ant-switch.ds-switch.ds-switch-size-md {\n min-width: 36px;\n height: 20px;\n line-height: 20px;\n }\n\n .ant-switch.ds-switch.ds-switch-size-md .ant-switch-handle {\n width: 16px;\n height: 16px;\n top: 2px;\n inset-inline-start: 2px;\n }\n\n .ant-switch.ds-switch.ds-switch-size-md.ant-switch-checked .ant-switch-handle {\n inset-inline-start: calc(100% - 18px);\n }\n\n .ant-switch.ds-switch.ds-switch-size-lg {\n min-width: 44px;\n height: 24px;\n line-height: 24px;\n }\n\n .ant-switch.ds-switch.ds-switch-size-lg .ant-switch-handle {\n width: 20px;\n height: 20px;\n top: 2px;\n inset-inline-start: 2px;\n }\n\n .ant-switch.ds-switch.ds-switch-size-lg.ant-switch-checked .ant-switch-handle {\n inset-inline-start: calc(100% - 22px);\n }\n\n .ant-switch.ds-switch .ant-switch-handle::before {\n background: ${thumb};\n box-shadow: none;\n }\n\n .ant-switch.ds-switch.ds-switch-state-hover:not(.ant-switch-checked):not(.ant-switch-disabled) {\n background: ${switchOffHover};\n }\n\n .ant-switch.ds-switch.ds-switch-state-hover.ant-switch-checked:not(.ant-switch-disabled) {\n background: ${switchOnHover};\n }\n\n .ant-switch.ds-switch.ds-switch-state-pressed:not(.ant-switch-checked):not(.ant-switch-disabled) {\n background: ${switchOffPressed};\n }\n\n .ant-switch.ds-switch.ds-switch-state-pressed.ant-switch-checked:not(.ant-switch-disabled) {\n background: ${switchOnPressed};\n }\n\n .ant-switch.ds-switch.ds-switch-state-focus:not(.ant-switch-disabled),\n .ant-switch.ds-switch:focus-visible:not(.ant-switch-disabled) {\n outline: 2px solid ${focusOutline};\n outline-offset: 2px;\n }\n\n .ant-switch.ds-switch.ant-switch-disabled:not(.ant-switch-checked) {\n background: ${switchOffDisabled};\n }\n\n .ant-switch.ds-switch.ant-switch-checked.ant-switch-disabled {\n background: ${switchOnDisabled};\n }\n\n .ant-switch.ds-switch .ant-switch-inner .ant-switch-inner-checked,\n .ant-switch.ds-switch .ant-switch-inner .ant-switch-inner-unchecked {\n font-size: 10px;\n font-weight: 700;\n }\n\n .ant-switch.ds-switch .ant-switch-inner .ant-switch-inner-checked {\n color: ${iconOn};\n }\n\n .ant-switch.ds-switch .ant-switch-inner .ant-switch-inner-unchecked {\n color: ${iconOff};\n }\n\n .ant-switch.ds-switch.ant-switch-disabled .ant-switch-inner .ant-switch-inner-checked,\n .ant-switch.ds-switch.ant-switch-disabled .ant-switch-inner .ant-switch-inner-unchecked {\n color: ${iconDisabled};\n }\n `;\n}\n\nfunction mergeClassNames(...names: Array<string | undefined>) {\n return names.filter(Boolean).join(' ');\n}\n\nconst containerStyle: CSSProperties = {\n display: 'inline-flex',\n alignItems: 'center',\n gap: 8,\n};\n\nconst labelStackStyle: CSSProperties = {\n display: 'inline-flex',\n flexDirection: 'column',\n gap: 2,\n};\n\nconst labelStyle: CSSProperties = {\n fontFamily: 'Nunito, sans-serif',\n fontSize: dsSemanticTokens.button.typography.small.fontSize,\n lineHeight: dsSemanticTokens.button.typography.small.lineHeight,\n fontWeight: 600,\n color: dsSemanticTokens.table.text.body,\n};\n\nconst descriptionStyle: CSSProperties = {\n fontFamily: 'Nunito, sans-serif',\n fontSize: 12,\n lineHeight: '16px',\n fontWeight: 600,\n color: dsSemanticTokens.table.text.sorterMuted,\n};\n\nexport const Switch = ({\n dsLabel,\n dsLabelPosition = 'right',\n dsSize = 'md',\n dsState = 'normal',\n dsShowIcon = false,\n dsShowSubLabel = false,\n dsDescription,\n id,\n className,\n checkedChildren,\n unCheckedChildren,\n ...props\n}: SwitchProps) => {\n useEffect(() => {\n injectStyles();\n }, []);\n\n const generatedId = useId();\n const switchId = id ?? (dsLabel || dsDescription ? generatedId : undefined);\n const resolvedCheckedChildren = dsShowIcon ? (checkedChildren ?? '+') : checkedChildren;\n const resolvedUncheckedChildren = dsShowIcon ? (unCheckedChildren ?? '-') : unCheckedChildren;\n const resolvedDescription = dsShowSubLabel ? dsDescription : undefined;\n\n const labelNode = dsLabel ? (\n <div style={labelStackStyle}>\n <label htmlFor={switchId} style={labelStyle}>\n {dsLabel}\n </label>\n {resolvedDescription ? <span style={descriptionStyle}>{resolvedDescription}</span> : null}\n </div>\n ) : null;\n\n return (\n <span style={containerStyle}>\n {dsLabelPosition === 'left' ? labelNode : null}\n <AntSwitch\n id={switchId}\n checkedChildren={resolvedCheckedChildren}\n unCheckedChildren={resolvedUncheckedChildren}\n className={mergeClassNames('ds-switch', `ds-switch-size-${dsSize}`, `ds-switch-state-${dsState}`, className)}\n {...props}\n />\n {dsLabelPosition === 'right' ? labelNode : null}\n </span>\n );\n};\n","import type { ReactNode } from 'react';\n\nexport type ClearVisibility = 'always' | 'hasValue' | 'never';\n\nexport type ClearConfig = {\n enabled?: boolean;\n label?: ReactNode;\n visibility?: ClearVisibility;\n onClear?: () => void;\n};\n\nexport const hasUsableValue = (value: unknown): boolean => {\n if (value === null || value === undefined) {\n return false;\n }\n\n if (typeof value === 'string') {\n return value.trim().length > 0;\n }\n\n if (Array.isArray(value)) {\n return value.length > 0;\n }\n\n if (typeof value === 'number' || typeof value === 'boolean') {\n return true;\n }\n\n if (typeof value === 'object') {\n const maybeDayjs = value as { isValid?: () => boolean };\n if (typeof maybeDayjs.isValid === 'function') {\n return maybeDayjs.isValid();\n }\n\n return Object.keys(value as Record<string, unknown>).length > 0;\n }\n\n return false;\n};\n\nexport const shouldShowClear = (\n clearable: boolean,\n visibility: ClearVisibility,\n value: unknown,\n): boolean => {\n if (!clearable || visibility === 'never') {\n return false;\n }\n\n if (visibility === 'always') {\n return true;\n }\n\n return hasUsableValue(value);\n};\n","import { Button, Flex } from 'antd';\nimport type { CSSProperties, ReactNode } from 'react';\nimport { shouldShowClear, type ClearConfig, type ClearVisibility } from './clearUtils';\nimport { dsSemanticTokens } from '../../theme/ontadaTheme';\n\nexport type FieldShellProps = {\n label: ReactNode;\n required?: boolean;\n htmlFor?: string;\n clear?: ClearConfig;\n clearable?: boolean;\n clearLabel?: ReactNode;\n clearVisibility?: ClearVisibility;\n clearValue?: unknown;\n onClear?: () => void;\n extraActions?: ReactNode;\n children: ReactNode;\n style?: CSSProperties;\n};\n\nconst rowStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: 8,\n marginBottom: 6,\n};\n\nconst actionGroupStyle: CSSProperties = {\n display: 'inline-flex',\n alignItems: 'center',\n gap: 10,\n};\n\nconst labelStyle: CSSProperties = {\n fontSize: dsSemanticTokens.button.typography.small.fontSize,\n lineHeight: dsSemanticTokens.button.typography.small.lineHeight,\n fontWeight: 600,\n fontFamily: 'Nunito, sans-serif',\n};\n\nconst requiredIndicatorStyle: CSSProperties = {\n fontSize: 12,\n lineHeight: '16px',\n fontWeight: 600,\n color: '#c53026',\n display: 'inline-flex',\n alignItems: 'center',\n fontFamily: 'Nunito, sans-serif',\n};\n\nexport const FieldShell = ({\n label,\n required,\n htmlFor,\n clear,\n clearable = false,\n clearLabel = 'Clear',\n clearVisibility = 'always',\n clearValue,\n onClear,\n extraActions,\n children,\n style,\n}: FieldShellProps) => {\n const resolvedClearable = clear?.enabled ?? clearable;\n const resolvedClearLabel = clear?.label ?? clearLabel;\n const resolvedClearVisibility = clear?.visibility ?? clearVisibility;\n const resolvedClearHandler = clear?.onClear ?? onClear;\n const showClear =\n shouldShowClear(resolvedClearable, resolvedClearVisibility, clearValue) &&\n Boolean(resolvedClearHandler);\n\n return (\n <div style={style}>\n <div style={rowStyle}>\n <Flex align=\"center\" gap={6}>\n <label htmlFor={htmlFor} style={labelStyle}>\n {label}\n </label>\n {required ? <span style={requiredIndicatorStyle}>✱</span> : null}\n </Flex>\n\n <div style={actionGroupStyle}>\n {showClear ? (\n <Button\n type=\"link\"\n size=\"small\"\n onClick={resolvedClearHandler}\n style={{ padding: 0, height: 'auto' }}\n >\n {resolvedClearLabel}\n </Button>\n ) : null}\n {extraActions}\n </div>\n </div>\n {children}\n </div>\n );\n};\n","import { Button, Flex, Typography } from 'antd';\nimport type { CSSProperties, ReactNode } from 'react';\nimport { shouldShowClear, type ClearConfig, type ClearVisibility } from './clearUtils';\nimport { dsSemanticTokens } from '../../theme/ontadaTheme';\n\nexport type FieldSetShellProps = {\n title: ReactNode;\n required?: boolean;\n description?: ReactNode;\n clear?: ClearConfig;\n clearable?: boolean;\n clearLabel?: ReactNode;\n clearVisibility?: ClearVisibility;\n clearValue?: unknown;\n onClear?: () => void;\n actions?: ReactNode;\n children: ReactNode;\n style?: CSSProperties;\n};\n\nconst titleRowStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: 12,\n};\n\nconst titleStyle: CSSProperties = {\n margin: 0,\n fontSize: dsSemanticTokens.button.typography.small.fontSize,\n lineHeight: dsSemanticTokens.button.typography.small.lineHeight,\n fontWeight: 600,\n fontFamily: 'Nunito, sans-serif',\n};\n\nconst requiredIndicatorStyle: CSSProperties = {\n fontSize: 12,\n lineHeight: '16px',\n fontWeight: 600,\n color: '#c53026',\n display: 'inline-flex',\n alignItems: 'center',\n fontFamily: 'Nunito, sans-serif',\n};\n\nexport const FieldSetShell = ({\n title,\n required,\n description,\n clear,\n clearable = false,\n clearLabel = 'Clear All',\n clearVisibility = 'always',\n clearValue,\n onClear,\n actions,\n children,\n style,\n}: FieldSetShellProps) => {\n const resolvedClearable = clear?.enabled ?? clearable;\n const resolvedClearLabel = clear?.label ?? clearLabel;\n const resolvedClearVisibility = clear?.visibility ?? clearVisibility;\n const resolvedClearHandler = clear?.onClear ?? onClear;\n const showClear =\n shouldShowClear(resolvedClearable, resolvedClearVisibility, clearValue) &&\n Boolean(resolvedClearHandler);\n\n return (\n <div style={style}>\n <div style={titleRowStyle}>\n <Flex align=\"center\" gap={6}>\n <Typography.Text style={titleStyle}>\n {title}\n </Typography.Text>\n {required ? <span style={requiredIndicatorStyle}>✱</span> : null}\n </Flex>\n <Flex align=\"center\" gap={10}>\n {showClear ? (\n <Button\n type=\"link\"\n size=\"small\"\n onClick={resolvedClearHandler}\n style={{ padding: 0, height: 'auto' }}\n >\n {resolvedClearLabel}\n </Button>\n ) : null}\n {actions}\n </Flex>\n </div>\n {description ? (\n <Typography.Paragraph type=\"secondary\" style={{ marginTop: 4, marginBottom: 16 }}>\n {description}\n </Typography.Paragraph>\n ) : null}\n {children}\n </div>\n );\n};\n","import { Button } from 'antd';\nimport { useId, useState } from 'react';\nimport type { CSSProperties, ComponentProps, ReactNode } from 'react';\nimport { Icon } from '../../utils/icons';\nimport { FieldShell } from './FieldShell';\nimport { Input } from './Input';\n\ntype InputProps = ComponentProps<typeof Input>;\n\nexport type AccessiblePasswordInputProps = Omit<InputProps, 'onChange' | 'type'> & {\n fieldLabel: ReactNode;\n fieldRequired?: boolean;\n showPasswordLabel?: string;\n hidePasswordLabel?: string;\n passwordVisible?: boolean;\n defaultPasswordVisible?: boolean;\n onPasswordVisibleChange?: (visible: boolean) => void;\n onValueChange?: (nextValue: string) => void;\n containerStyle?: CSSProperties;\n fieldActions?: ReactNode;\n};\n\nconst suffixStyle: CSSProperties = {\n display: 'inline-flex',\n alignItems: 'center',\n gap: 8,\n};\n\nexport const AccessiblePasswordInput = ({\n fieldLabel,\n fieldRequired,\n showPasswordLabel = 'Show password',\n hidePasswordLabel = 'Hide password',\n passwordVisible,\n defaultPasswordVisible = false,\n onPasswordVisibleChange,\n onValueChange,\n containerStyle,\n fieldActions,\n id,\n suffix,\n value,\n disabled,\n ...inputProps\n}: AccessiblePasswordInputProps) => {\n const generatedId = useId();\n const inputId = id ?? generatedId;\n const [internalPasswordVisible, setInternalPasswordVisible] = useState(defaultPasswordVisible);\n const isPasswordVisible = passwordVisible ?? internalPasswordVisible;\n const visibilityLabel = isPasswordVisible ? hidePasswordLabel : showPasswordLabel;\n\n const setPasswordVisibility = (nextVisible: boolean) => {\n if (passwordVisible == null) {\n setInternalPasswordVisible(nextVisible);\n }\n\n onPasswordVisibleChange?.(nextVisible);\n };\n\n const passwordToggle = (\n <Button\n type=\"text\"\n htmlType=\"button\"\n aria-label={visibilityLabel}\n aria-controls={inputId}\n aria-pressed={isPasswordVisible}\n title={visibilityLabel}\n disabled={disabled}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => setPasswordVisibility(!isPasswordVisible)}\n style={{ paddingInline: 4, height: 24, minWidth: 24 }}\n icon={\n <span aria-hidden=\"true\" style={{ display: 'inline-flex', alignItems: 'center' }}>\n <Icon name={isPasswordVisible ? 'eyeOff' : 'eye'} size={16} />\n </span>\n }\n />\n );\n\n return (\n <FieldShell\n label={fieldLabel}\n required={fieldRequired}\n htmlFor={inputId}\n extraActions={fieldActions}\n style={containerStyle}\n >\n <Input\n id={inputId}\n type={isPasswordVisible ? 'text' : 'password'}\n value={value}\n disabled={disabled}\n suffix={suffix ? <span style={suffixStyle}>{suffix}{passwordToggle}</span> : passwordToggle}\n onChange={(event) => {\n inputProps.onChange?.(event);\n onValueChange?.(event.target.value);\n }}\n {...inputProps}\n />\n </FieldShell>\n );\n};\n","import { Checkbox, Typography } from 'antd';\nimport type { CSSProperties, ReactNode } from 'react';\nimport type { CheckboxGroupProps } from 'antd';\n\ntype AntCheckboxGroupProps = CheckboxGroupProps;\n\nexport type AccessibleCheckboxGroupProps = Omit<AntCheckboxGroupProps, 'onChange'> & {\n legend: ReactNode;\n required?: boolean;\n description?: ReactNode;\n onSelectionChange?: (selectedValues: (string | number)[]) => void;\n fieldsetStyle?: CSSProperties;\n legendStyle?: CSSProperties;\n};\n\nconst fieldsetStyle: CSSProperties = {\n border: 'none',\n padding: 0,\n margin: 0,\n minWidth: 0,\n};\n\nconst legendBaseStyle: CSSProperties = {\n fontWeight: 600,\n marginBottom: 6,\n display: 'block',\n};\n\nconst descriptionStyle: CSSProperties = {\n fontSize: '12px',\n marginTop: 4,\n marginBottom: 8,\n opacity: 0.65,\n};\n\nconst requiredIndicatorStyle: CSSProperties = {\n fontSize: 12,\n lineHeight: '16px',\n fontWeight: 600,\n color: '#c53026',\n display: 'inline-flex',\n alignItems: 'center',\n marginLeft: 4,\n fontFamily: 'Nunito, sans-serif',\n};\n\nexport const AccessibleCheckboxGroup = ({\n legend,\n required,\n description,\n onSelectionChange,\n fieldsetStyle: customFieldsetStyle,\n legendStyle: customLegendStyle,\n ...checkboxGroupProps\n}: AccessibleCheckboxGroupProps) => {\n return (\n <fieldset style={{ ...fieldsetStyle, ...customFieldsetStyle }}>\n <legend style={{ ...legendBaseStyle, ...customLegendStyle }}>\n <span>\n {legend}\n {required ? (\n <Typography.Text type=\"danger\" style={requiredIndicatorStyle}>\n ✱\n </Typography.Text>\n ) : null}\n </span>\n </legend>\n\n {description ? (\n <div style={descriptionStyle}>{description}</div>\n ) : null}\n\n <Checkbox.Group\n {...checkboxGroupProps}\n onChange={(values) => {\n checkboxGroupProps.onChange?.(values);\n onSelectionChange?.(values);\n }}\n />\n </fieldset>\n );\n};\n","import { Radio, Typography } from 'antd';\nimport type { CSSProperties, ReactNode } from 'react';\nimport type { RadioGroupProps } from 'antd';\n\ntype AntRadioGroupProps = RadioGroupProps;\n\nexport type AccessibleRadioGroupProps = Omit<AntRadioGroupProps, 'onChange'> & {\n legend: ReactNode;\n required?: boolean;\n description?: ReactNode;\n onSelectionChange?: (value: string | number) => void;\n fieldsetStyle?: CSSProperties;\n legendStyle?: CSSProperties;\n};\n\nconst fieldsetStyle: CSSProperties = {\n border: 'none',\n padding: 0,\n margin: 0,\n minWidth: 0,\n};\n\nconst legendBaseStyle: CSSProperties = {\n fontWeight: 600,\n marginBottom: 6,\n display: 'block',\n};\n\nconst descriptionStyle: CSSProperties = {\n fontSize: '12px',\n marginTop: 4,\n marginBottom: 8,\n opacity: 0.65,\n};\n\nconst requiredIndicatorStyle: CSSProperties = {\n fontSize: 12,\n lineHeight: '16px',\n fontWeight: 600,\n color: '#c53026',\n display: 'inline-flex',\n alignItems: 'center',\n marginLeft: 4,\n fontFamily: 'Nunito, sans-serif',\n};\n\nexport const AccessibleRadioGroup = ({\n legend,\n required,\n description,\n onSelectionChange,\n fieldsetStyle: customFieldsetStyle,\n legendStyle: customLegendStyle,\n ...radioGroupProps\n}: AccessibleRadioGroupProps) => {\n return (\n <fieldset style={{ ...fieldsetStyle, ...customFieldsetStyle }}>\n <legend style={{ ...legendBaseStyle, ...customLegendStyle }}>\n <span>\n {legend}\n {required ? (\n <Typography.Text type=\"danger\" style={requiredIndicatorStyle}>\n ✱\n </Typography.Text>\n ) : null}\n </span>\n </legend>\n\n {description ? (\n <div style={descriptionStyle}>{description}</div>\n ) : null}\n\n <Radio.Group\n {...radioGroupProps}\n onChange={(e) => {\n radioGroupProps.onChange?.(e);\n onSelectionChange?.(e.target.value);\n }}\n />\n </fieldset>\n );\n};\n","import { Switch, Typography } from 'antd';\nimport { useId } from 'react';\nimport type { CSSProperties, ReactNode } from 'react';\nimport type { SwitchProps } from 'antd';\n\ntype AntSwitchProps = SwitchProps;\n\nexport type AccessibleSwitchProps = Omit<AntSwitchProps, 'onChange'> & {\n label: ReactNode;\n description?: ReactNode;\n required?: boolean;\n onToggle?: (checked: boolean) => void;\n containerStyle?: CSSProperties;\n};\n\nconst containerBaseStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 12,\n};\n\nconst labelWrapperStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n};\n\nconst labelStyle: CSSProperties = {\n fontWeight: 600,\n};\n\nconst descriptionStyle: CSSProperties = {\n fontSize: '12px',\n opacity: 0.65,\n};\n\nconst requiredIndicatorStyle: CSSProperties = {\n fontSize: 12,\n lineHeight: '16px',\n fontWeight: 600,\n color: '#c53026',\n display: 'inline-flex',\n alignItems: 'center',\n marginLeft: 4,\n fontFamily: 'Nunito, sans-serif',\n};\n\nexport const AccessibleSwitch = ({\n label,\n description,\n required,\n onToggle,\n containerStyle: customContainerStyle,\n id,\n ...switchProps\n}: AccessibleSwitchProps) => {\n const generatedId = useId();\n const switchId = id ?? generatedId;\n\n return (\n <div style={{ ...containerBaseStyle, ...customContainerStyle }}>\n <Switch\n id={switchId}\n {...switchProps}\n onChange={(checked) => {\n switchProps.onChange?.(checked);\n onToggle?.(checked);\n }}\n aria-label={typeof label === 'string' ? label : undefined}\n aria-describedby={description ? `${switchId}-description` : undefined}\n />\n <div style={labelWrapperStyle}>\n <label htmlFor={switchId} style={labelStyle}>\n {label}\n {required ? (\n <Typography.Text type=\"danger\" style={requiredIndicatorStyle}>\n ✱\n </Typography.Text>\n ) : null}\n </label>\n {description ? (\n <div id={`${switchId}-description`} style={descriptionStyle}>\n {description}\n </div>\n ) : null}\n </div>\n </div>\n );\n};\n","import { Select } from 'antd';\nimport { useId } from 'react';\nimport type { CSSProperties, ReactNode } from 'react';\nimport type { SelectProps } from 'antd';\nimport { useEffect } from 'react';\nimport {\n DS_SELECT_CLASS,\n DS_SELECT_DROPDOWN_CLASS,\n ensureSelectStyles,\n mergeClassNames,\n} from './selectStyles';\n\ntype AntSelectProps = SelectProps;\n\nexport type AccessibleSelectProps = Omit<AntSelectProps, 'onChange' | 'id'> & {\n fieldLabel: ReactNode;\n required?: boolean;\n description?: ReactNode;\n onValueChange?: (value: string | number | null) => void;\n containerStyle?: CSSProperties;\n selectId?: string;\n};\n\nconst containerStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 6,\n};\n\nconst labelStyle: CSSProperties = {\n fontWeight: 600,\n display: 'flex',\n alignItems: 'center',\n gap: 4,\n};\n\nconst descriptionStyle: CSSProperties = {\n fontSize: '12px',\n opacity: 0.65,\n};\n\nconst requiredIndicatorStyle: CSSProperties = {\n fontSize: 12,\n lineHeight: '16px',\n fontWeight: 600,\n color: '#c53026',\n display: 'inline-flex',\n alignItems: 'center',\n fontFamily: 'Nunito, sans-serif',\n};\n\nexport const AccessibleSelect = ({\n fieldLabel,\n required,\n description,\n onValueChange,\n containerStyle: customContainerStyle,\n selectId: providedId,\n ...selectProps\n}: AccessibleSelectProps) => {\n useEffect(() => {\n ensureSelectStyles();\n }, []);\n\n const generatedId = useId();\n const selectId = providedId ?? generatedId;\n\n const {\n className: providedClassName,\n popupClassName: providedPopupClassName,\n classNames: providedClassNames,\n ...resolvedSelectProps\n } = selectProps;\n\n const mergedSelectClassName = mergeClassNames(DS_SELECT_CLASS, providedClassName);\n const mergedPopupRootClass = mergeClassNames(\n DS_SELECT_DROPDOWN_CLASS,\n (providedClassNames as any)?.popup?.root,\n providedPopupClassName,\n );\n\n const mergedClassNames = {\n ...(providedClassNames ?? {}),\n popup: {\n ...((providedClassNames as any)?.popup ?? {}),\n root: mergedPopupRootClass,\n },\n } as SelectProps['classNames'];\n\n return (\n <div style={{ ...containerStyle, ...customContainerStyle }}>\n <label htmlFor={selectId} style={labelStyle}>\n {fieldLabel}\n {required ? <span style={requiredIndicatorStyle}>✱</span> : null}\n </label>\n\n {description ? (\n <div id={`${selectId}-description`} style={descriptionStyle}>\n {description}\n </div>\n ) : null}\n\n <Select\n id={selectId}\n {...resolvedSelectProps}\n className={mergedSelectClassName}\n classNames={mergedClassNames}\n onChange={(value) => {\n resolvedSelectProps.onChange?.(value);\n onValueChange?.(value ?? null);\n }}\n aria-describedby={description ? `${selectId}-description` : undefined}\n />\n </div>\n );\n};\n","import { DatePicker } from 'antd';\nimport { useId, useEffect } from 'react';\nimport type { CSSProperties, ReactNode } from 'react';\nimport type { DatePickerProps } from 'antd';\nimport {\n DS_PICKER_CLASS,\n DS_PICKER_PANEL_CLASS,\n ensureDatePickerStyles,\n mergePickerClassNames,\n} from './datePickerStyles';\nimport { DS_DATE_FORMAT } from './DatePicker';\n\ntype AntDatePickerProps = DatePickerProps;\n\nexport type AccessibleDatePickerProps = Omit<AntDatePickerProps, 'onChange' | 'id'> & {\n fieldLabel: ReactNode;\n required?: boolean;\n description?: ReactNode;\n errorMessage?: ReactNode;\n onValueChange?: (value: any) => void;\n containerStyle?: CSSProperties;\n datePickerId?: string;\n};\n\nconst containerStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 6,\n};\n\nconst labelStyle: CSSProperties = {\n fontWeight: 600,\n display: 'flex',\n alignItems: 'center',\n gap: 4,\n};\n\nconst descriptionStyle: CSSProperties = {\n fontSize: '12px',\n opacity: 0.65,\n};\n\nconst errorStyle: CSSProperties = {\n fontSize: '12px',\n color: '#ff4d4f',\n};\n\nconst requiredIndicatorStyle: CSSProperties = {\n fontSize: 12,\n lineHeight: '16px',\n fontWeight: 600,\n color: '#c53026',\n display: 'inline-flex',\n alignItems: 'center',\n fontFamily: 'Nunito, sans-serif',\n};\n\nexport const AccessibleDatePicker = ({\n fieldLabel,\n required,\n description,\n errorMessage,\n onValueChange,\n containerStyle: customContainerStyle,\n datePickerId: providedId,\n ...datePickerProps\n}: AccessibleDatePickerProps) => {\n useEffect(() => {\n ensureDatePickerStyles();\n }, []);\n\n const generatedId = useId();\n const datePickerId = providedId ?? generatedId;\n const descriptionId = `${datePickerId}-description`;\n const errorId = `${datePickerId}-error`;\n\n const ariaDescribedBy = [\n description ? descriptionId : null,\n errorMessage ? errorId : null,\n ]\n .filter(Boolean)\n .join(' ');\n\n const {\n className: providedClassName,\n popupClassName: providedPopupClassName,\n classNames: providedClassNames,\n ...resolvedPickerProps\n } = datePickerProps;\n\n const mergedClassName = mergePickerClassNames(DS_PICKER_CLASS, providedClassName);\n const mergedPopupRootClassName = mergePickerClassNames(\n DS_PICKER_PANEL_CLASS,\n (providedClassNames as any)?.popup?.root,\n providedPopupClassName,\n );\n\n const mergedClassNames = {\n ...(providedClassNames ?? {}),\n popup: {\n ...((providedClassNames as any)?.popup ?? {}),\n root: mergedPopupRootClassName,\n },\n } as DatePickerProps['classNames'];\n\n return (\n <div style={{ ...containerStyle, ...customContainerStyle }}>\n <label htmlFor={datePickerId} style={labelStyle}>\n {fieldLabel}\n {required ? <span style={requiredIndicatorStyle}>✱</span> : null}\n </label>\n\n {description ? (\n <div id={descriptionId} style={descriptionStyle}>\n {description}\n </div>\n ) : null}\n\n <DatePicker\n id={datePickerId}\n {...resolvedPickerProps}\n className={mergedClassName}\n popupClassName={mergedPopupRootClassName}\n classNames={mergedClassNames}\n format={resolvedPickerProps.format ?? DS_DATE_FORMAT}\n placeholder={resolvedPickerProps.placeholder ?? DS_DATE_FORMAT}\n onChange={(date, dateString) => {\n resolvedPickerProps.onChange?.(date, dateString);\n onValueChange?.(date);\n }}\n status={errorMessage ? 'error' : undefined}\n aria-describedby={ariaDescribedBy || undefined}\n aria-invalid={Boolean(errorMessage)}\n />\n\n {errorMessage ? (\n <div id={errorId} style={errorStyle} role=\"alert\">\n {errorMessage}\n </div>\n ) : null}\n </div>\n );\n};\n","import type { CSSProperties, ReactNode } from 'react';\nimport { Icon } from '../../utils/useCustomIcon';\n\nexport type FormErrorProps = {\n message?: ReactNode;\n containerStyle?: CSSProperties;\n live?: 'polite' | 'assertive';\n};\n\nconst defaultContainerStyle: CSSProperties = {\n fontSize: '12px',\n lineHeight: '16px',\n letterSpacing: '0.012px',\n fontWeight: 600,\n color: '#c53026',\n fontFamily: 'Nunito, sans-serif',\n marginTop: 0,\n display: 'flex',\n alignItems: 'flex-start',\n gap: 6,\n};\n\nconst iconStyle: CSSProperties = {\n flexShrink: 0,\n width: 14,\n height: 14,\n lineHeight: '14px',\n marginTop: 1,\n};\n\n/**\n * Accessible form error message component\n * - Uses role=\"alert\" for polite announcements (default)\n * - Supports aria-live=\"assertive\" for urgent errors\n * - Pairs with aria-invalid and aria-describedby on form controls\n */\nexport const FormError = ({\n message,\n containerStyle: customContainerStyle,\n live = 'polite',\n}: FormErrorProps) => {\n if (!message) {\n return null;\n }\n\n return (\n <div\n role={live === 'assertive' ? 'alert' : undefined}\n aria-live={live === 'assertive' ? 'assertive' : 'polite'}\n style={{ ...defaultContainerStyle, ...customContainerStyle }}\n >\n <span style={iconStyle} aria-hidden=\"true\">\n <Icon name=\"alertTriangle\" size={14} />\n </span>\n <span>{message}</span>\n </div>\n );\n};\n","import type { CSSProperties, ReactNode } from 'react';\nimport { Icon } from '../../utils/useCustomIcon';\n\nexport type FormSuccessProps = {\n message?: ReactNode;\n containerStyle?: CSSProperties;\n live?: 'polite' | 'assertive';\n};\n\nconst defaultContainerStyle: CSSProperties = {\n fontSize: '12px',\n lineHeight: '16px',\n letterSpacing: '0.012px',\n fontWeight: 600,\n color: '#1e394e',\n fontFamily: 'Nunito, sans-serif',\n marginTop: 0,\n display: 'flex',\n alignItems: 'flex-start',\n gap: 6,\n};\n\nconst iconStyle: CSSProperties = {\n flexShrink: 0,\n width: 14,\n height: 14,\n lineHeight: '14px',\n marginTop: 1,\n color: '#277036',\n};\n\n/**\n * Accessible form success message component for submission validation feedback.\n */\nexport const FormSuccess = ({\n message,\n containerStyle: customContainerStyle,\n live = 'polite',\n}: FormSuccessProps) => {\n if (!message) {\n return null;\n }\n\n return (\n <div\n role={live === 'assertive' ? 'status' : undefined}\n aria-live={live === 'assertive' ? 'assertive' : 'polite'}\n style={{ ...defaultContainerStyle, ...customContainerStyle }}\n >\n <span style={iconStyle} aria-hidden=\"true\">\n <Icon name=\"check\" size={14} />\n </span>\n <span>{message}</span>\n </div>\n );\n};\n","import type { CSSProperties, ReactNode } from 'react';\nimport { Icon } from '../../utils/useCustomIcon';\n\nexport type FormWarningProps = {\n message?: ReactNode;\n containerStyle?: CSSProperties;\n live?: 'polite' | 'assertive';\n};\n\nconst defaultContainerStyle: CSSProperties = {\n fontSize: '12px',\n lineHeight: '16px',\n letterSpacing: '0.012px',\n fontWeight: 600,\n color: '#1e394e',\n fontFamily: 'Nunito, sans-serif',\n marginTop: 0,\n display: 'flex',\n alignItems: 'flex-start',\n gap: 6,\n};\n\nconst iconStyle: CSSProperties = {\n flexShrink: 0,\n width: 14,\n height: 14,\n lineHeight: '14px',\n marginTop: 1,\n color: '#b05d23',\n};\n\n/**\n * Accessible form warning message component for non-blocking validation feedback.\n */\nexport const FormWarning = ({\n message,\n containerStyle: customContainerStyle,\n live = 'polite',\n}: FormWarningProps) => {\n if (!message) {\n return null;\n }\n\n return (\n <div\n role={live === 'assertive' ? 'status' : undefined}\n aria-live={live === 'assertive' ? 'assertive' : 'polite'}\n style={{ ...defaultContainerStyle, ...customContainerStyle }}\n >\n <span style={iconStyle} aria-hidden=\"true\">\n <Icon name=\"alertTriangle\" size={14} />\n </span>\n <span>{message}</span>\n </div>\n );\n};\n","import type { ReactNode } from 'react';\n\nexport type FormFieldValidationState = 'idle' | 'error' | 'success';\n\nexport type ValidationRule = {\n type: 'required' | 'email' | 'minLength' | 'maxLength' | 'pattern' | 'custom';\n message: string;\n validate?: (value: any) => boolean;\n minLength?: number;\n maxLength?: number;\n pattern?: RegExp;\n};\n\nexport type FieldValidator = {\n rules: ValidationRule[];\n validate: (value: any) => { isValid: boolean; error?: string };\n};\n\n/**\n * Creates a field validator with reusable rules\n * Designed for accessible form validation with clear error messaging\n */\nexport const createFieldValidator = (rules: ValidationRule[]): FieldValidator => {\n return {\n rules,\n validate: (value: any) => {\n for (const rule of rules) {\n let isValid = false;\n\n switch (rule.type) {\n case 'required':\n isValid = value !== undefined && value !== null && value !== '';\n break;\n\n case 'email': {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n isValid = !value || emailRegex.test(value);\n break;\n }\n\n case 'minLength':\n isValid =\n !value || (typeof value === 'string' && value.length >= (rule.minLength ?? 0));\n break;\n\n case 'maxLength':\n isValid =\n !value || (typeof value === 'string' && value.length <= (rule.maxLength ?? 999));\n break;\n\n case 'pattern':\n isValid = !value || (rule.pattern?.test(value) ?? false);\n break;\n\n case 'custom':\n isValid = rule.validate?.(value) ?? false;\n break;\n\n default:\n isValid = true;\n }\n\n if (!isValid) {\n return {\n isValid: false,\n error: rule.message,\n };\n }\n }\n\n return { isValid: true };\n },\n };\n};\n\n/**\n * Common validation rule presets\n */\nexport const ValidationRules = {\n required: (message = 'This field is required'): ValidationRule => ({\n type: 'required',\n message,\n }),\n\n email: (message = 'Please enter a valid email address'): ValidationRule => ({\n type: 'email',\n message,\n }),\n\n minLength: (minLength: number, message?: string): ValidationRule => ({\n type: 'minLength',\n message: message ?? `Must be at least ${minLength} characters`,\n minLength,\n }),\n\n maxLength: (maxLength: number, message?: string): ValidationRule => ({\n type: 'maxLength',\n message: message ?? `Must not exceed ${maxLength} characters`,\n maxLength,\n }),\n\n pattern: (pattern: RegExp, message: string): ValidationRule => ({\n type: 'pattern',\n message,\n pattern,\n }),\n\n custom: (validate: (value: any) => boolean, message: string): ValidationRule => ({\n type: 'custom',\n message,\n validate,\n }),\n};\n","import type { CSSProperties, ReactNode } from 'react';\nimport { FieldShell } from './FieldShell';\nimport { Input } from './Input';\nimport type { ClearConfig, ClearVisibility } from './clearUtils';\n\ntype InputProps = React.ComponentProps<typeof Input>;\n\nexport type ClearableInputProps = Omit<InputProps, 'onChange'> & {\n fieldLabel: ReactNode;\n fieldRequired?: boolean;\n clear?: ClearConfig;\n clearable?: boolean;\n clearLabel?: ReactNode;\n clearVisibility?: ClearVisibility;\n onClear?: () => void;\n onValueChange?: (nextValue: string) => void;\n containerStyle?: CSSProperties;\n fieldActions?: ReactNode;\n};\n\nexport const ClearableInput = ({\n fieldLabel,\n fieldRequired,\n clear,\n clearable = true,\n clearLabel,\n clearVisibility = 'always',\n onClear,\n onValueChange,\n value,\n containerStyle,\n fieldActions,\n id,\n ...inputProps\n}: ClearableInputProps) => {\n const clearAction = clear?.onClear ?? onClear;\n\n const handleClear = () => {\n clearAction?.();\n onValueChange?.('');\n };\n\n return (\n <FieldShell\n label={fieldLabel}\n required={fieldRequired}\n htmlFor={id}\n clear={{\n enabled: clear?.enabled ?? clearable,\n label: clear?.label ?? clearLabel,\n visibility: clear?.visibility ?? clearVisibility,\n onClear: handleClear,\n }}\n clearValue={value}\n extraActions={fieldActions}\n style={containerStyle}\n >\n <Input\n id={id}\n value={value}\n onChange={(event) => {\n inputProps.onChange?.(event);\n onValueChange?.(event.target.value);\n }}\n {...inputProps}\n />\n </FieldShell>\n );\n};\n","import { Select } from 'antd';\nimport type { CSSProperties, ReactNode } from 'react';\nimport { useEffect } from 'react';\nimport { FieldShell } from './FieldShell';\nimport type { ClearConfig, ClearVisibility } from './clearUtils';\nimport {\n DS_SELECT_CLASS,\n DS_SELECT_DROPDOWN_CLASS,\n ensureSelectStyles,\n mergeClassNames,\n} from './selectStyles';\n\ntype SelectProps = React.ComponentProps<typeof Select>;\n\nexport type ClearableSelectProps = Omit<SelectProps, 'onChange'> & {\n fieldLabel: ReactNode;\n fieldRequired?: boolean;\n clear?: ClearConfig;\n clearable?: boolean;\n clearLabel?: ReactNode;\n clearVisibility?: ClearVisibility;\n onClear?: () => void;\n onValueChange?: (nextValue: SelectProps['value']) => void;\n clearToValue?: SelectProps['value'];\n containerStyle?: CSSProperties;\n fieldActions?: ReactNode;\n};\n\nexport const ClearableSelect = ({\n fieldLabel,\n fieldRequired,\n clear,\n clearable = true,\n clearLabel,\n clearVisibility = 'always',\n onClear,\n onValueChange,\n clearToValue,\n value,\n containerStyle,\n fieldActions,\n id,\n ...selectProps\n}: ClearableSelectProps) => {\n useEffect(() => {\n ensureSelectStyles();\n }, []);\n\n const {\n className: providedClassName,\n popupClassName: providedPopupClassName,\n classNames: providedClassNames,\n ...resolvedSelectProps\n } = selectProps;\n\n const clearValue = clearToValue === undefined ? undefined : clearToValue;\n const clearAction = clear?.onClear ?? onClear;\n const mergedSelectClassName = mergeClassNames(DS_SELECT_CLASS, providedClassName);\n const mergedPopupRootClass = mergeClassNames(\n DS_SELECT_DROPDOWN_CLASS,\n (providedClassNames as any)?.popup?.root,\n providedPopupClassName,\n );\n const mergedClassNames = {\n ...(providedClassNames ?? {}),\n popup: {\n ...((providedClassNames as any)?.popup ?? {}),\n root: mergedPopupRootClass,\n },\n } as SelectProps['classNames'];\n\n const handleClear = () => {\n clearAction?.();\n onValueChange?.(clearValue);\n resolvedSelectProps.onChange?.(clearValue, undefined as never);\n };\n\n return (\n <FieldShell\n label={fieldLabel}\n required={fieldRequired}\n htmlFor={id}\n clear={{\n enabled: clear?.enabled ?? clearable,\n label: clear?.label ?? clearLabel,\n visibility: clear?.visibility ?? clearVisibility,\n onClear: handleClear,\n }}\n clearValue={value}\n extraActions={fieldActions}\n style={containerStyle}\n >\n <Select\n id={id}\n value={value}\n className={mergedSelectClassName}\n classNames={mergedClassNames}\n onChange={(nextValue, option) => {\n resolvedSelectProps.onChange?.(nextValue, option);\n onValueChange?.(nextValue);\n }}\n style={{ width: '100%', ...resolvedSelectProps.style }}\n {...resolvedSelectProps}\n />\n </FieldShell>\n );\n};\n","import { DatePicker } from 'antd';\nimport { useEffect } from 'react';\nimport type { CSSProperties, ReactNode } from 'react';\nimport type { Dayjs } from 'dayjs';\nimport { FieldShell } from './FieldShell';\nimport type { ClearConfig, ClearVisibility } from './clearUtils';\nimport {\n DS_PICKER_CLASS,\n DS_PICKER_PANEL_CLASS,\n ensureDatePickerStyles,\n mergePickerClassNames,\n} from './datePickerStyles';\nimport { DS_DATE_FORMAT } from './DatePicker';\n\ntype DatePickerProps = React.ComponentProps<typeof DatePicker>;\n\nexport type ClearableDatePickerProps = Omit<DatePickerProps, 'onChange'> & {\n fieldLabel: ReactNode;\n fieldRequired?: boolean;\n clear?: ClearConfig;\n clearable?: boolean;\n clearLabel?: ReactNode;\n clearVisibility?: ClearVisibility;\n onClear?: () => void;\n onValueChange?: (nextValue: Dayjs | null) => void;\n containerStyle?: CSSProperties;\n fieldActions?: ReactNode;\n};\n\nexport const ClearableDatePicker = ({\n fieldLabel,\n fieldRequired,\n clear,\n clearable = true,\n clearLabel,\n clearVisibility = 'always',\n onClear,\n onValueChange,\n value,\n containerStyle,\n fieldActions,\n id,\n ...pickerProps\n}: ClearableDatePickerProps) => {\n useEffect(() => {\n ensureDatePickerStyles();\n }, []);\n\n const clearAction = clear?.onClear ?? onClear;\n\n const handleClear = () => {\n clearAction?.();\n onValueChange?.(null);\n pickerProps.onChange?.(null, '');\n };\n\n const {\n className: providedClassName,\n popupClassName: providedPopupClassName,\n classNames: providedClassNames,\n ...resolvedPickerProps\n } = pickerProps;\n\n const mergedClassName = mergePickerClassNames(DS_PICKER_CLASS, providedClassName);\n const mergedPopupRootClassName = mergePickerClassNames(\n DS_PICKER_PANEL_CLASS,\n (providedClassNames as any)?.popup?.root,\n providedPopupClassName,\n );\n\n const mergedClassNames = {\n ...(providedClassNames ?? {}),\n popup: {\n ...((providedClassNames as any)?.popup ?? {}),\n root: mergedPopupRootClassName,\n },\n } as DatePickerProps['classNames'];\n\n return (\n <FieldShell\n label={fieldLabel}\n required={fieldRequired}\n htmlFor={id}\n clear={{\n enabled: clear?.enabled ?? clearable,\n label: clear?.label ?? clearLabel,\n visibility: clear?.visibility ?? clearVisibility,\n onClear: handleClear,\n }}\n clearValue={value}\n extraActions={fieldActions}\n style={containerStyle}\n >\n <DatePicker\n id={id}\n value={value}\n onChange={(nextDate, dateString) => {\n resolvedPickerProps.onChange?.(nextDate, dateString);\n onValueChange?.(nextDate);\n }}\n className={mergedClassName}\n popupClassName={mergedPopupRootClassName}\n classNames={mergedClassNames}\n format={resolvedPickerProps.format ?? DS_DATE_FORMAT}\n placeholder={resolvedPickerProps.placeholder ?? DS_DATE_FORMAT}\n style={{ width: '100%', ...resolvedPickerProps.style }}\n {...resolvedPickerProps}\n />\n </FieldShell>\n );\n};\n","import { InputNumber } from 'antd';\nimport type { CSSProperties, ReactNode } from 'react';\nimport { FieldShell } from './FieldShell';\nimport type { ClearConfig, ClearVisibility } from './clearUtils';\n\ntype InputNumberProps = React.ComponentProps<typeof InputNumber>;\n\nexport type ClearableInputNumberProps = Omit<InputNumberProps, 'onChange'> & {\n fieldLabel: ReactNode;\n fieldRequired?: boolean;\n clear?: ClearConfig;\n clearable?: boolean;\n clearLabel?: ReactNode;\n clearVisibility?: ClearVisibility;\n onClear?: () => void;\n onValueChange?: (nextValue: InputNumberProps['value']) => void;\n clearToValue?: InputNumberProps['value'];\n containerStyle?: CSSProperties;\n fieldActions?: ReactNode;\n};\n\nexport const ClearableInputNumber = ({\n fieldLabel,\n fieldRequired,\n clear,\n clearable = true,\n clearLabel,\n clearVisibility = 'always',\n onClear,\n onValueChange,\n clearToValue,\n value,\n containerStyle,\n fieldActions,\n id,\n ...numberProps\n}: ClearableInputNumberProps) => {\n const clearAction = clear?.onClear ?? onClear;\n const clearValue = clearToValue === undefined ? null : clearToValue;\n\n const handleClear = () => {\n clearAction?.();\n onValueChange?.(clearValue);\n numberProps.onChange?.(clearValue);\n };\n\n return (\n <FieldShell\n label={fieldLabel}\n required={fieldRequired}\n htmlFor={id}\n clear={{\n enabled: clear?.enabled ?? clearable,\n label: clear?.label ?? clearLabel,\n visibility: clear?.visibility ?? clearVisibility,\n onClear: handleClear,\n }}\n clearValue={value}\n extraActions={fieldActions}\n style={containerStyle}\n >\n <InputNumber\n id={id}\n value={value}\n onChange={(nextValue) => {\n numberProps.onChange?.(nextValue);\n onValueChange?.(nextValue);\n }}\n style={{ width: '100%', ...numberProps.style }}\n {...numberProps}\n />\n </FieldShell>\n );\n};\n","import { TimePicker as DSTimePicker } from './TimePicker';\nimport type { CSSProperties, ReactNode } from 'react';\nimport type { Dayjs } from 'dayjs';\nimport { FieldShell } from './FieldShell';\nimport type { ClearConfig, ClearVisibility } from './clearUtils';\nimport type { DSTimePickerProps } from './TimePicker';\n\ntype TimePickerProps = DSTimePickerProps;\n\nexport type ClearableTimePickerProps = Omit<TimePickerProps, 'onChange'> & {\n fieldLabel: ReactNode;\n fieldRequired?: boolean;\n clear?: ClearConfig;\n clearable?: boolean;\n clearLabel?: ReactNode;\n clearVisibility?: ClearVisibility;\n onClear?: () => void;\n onValueChange?: (nextValue: Dayjs | null) => void;\n containerStyle?: CSSProperties;\n fieldActions?: ReactNode;\n dsFormat?: DSTimePickerProps['dsFormat'];\n};\n\nexport const ClearableTimePicker = ({\n fieldLabel,\n fieldRequired,\n clear,\n clearable = true,\n clearLabel,\n clearVisibility = 'always',\n onClear,\n onValueChange,\n value,\n containerStyle,\n fieldActions,\n id,\n dsFormat,\n ...timeProps\n}: ClearableTimePickerProps) => {\n const clearAction = clear?.onClear ?? onClear;\n\n const handleClear = () => {\n clearAction?.();\n onValueChange?.(null);\n timeProps.onChange?.(null, '');\n };\n\n return (\n <FieldShell\n label={fieldLabel}\n required={fieldRequired}\n htmlFor={id}\n clear={{\n enabled: clear?.enabled ?? clearable,\n label: clear?.label ?? clearLabel,\n visibility: clear?.visibility ?? clearVisibility,\n onClear: handleClear,\n }}\n clearValue={value}\n extraActions={fieldActions}\n style={containerStyle}\n >\n <DSTimePicker\n id={id}\n value={value}\n onChange={(nextTime, timeString) => {\n timeProps.onChange?.(nextTime, timeString);\n onValueChange?.(nextTime);\n }}\n dsFormat={dsFormat}\n style={{ width: '100%', ...timeProps.style }}\n {...timeProps}\n />\n </FieldShell>\n );\n};\n","import { TreeSelect } from 'antd';\nimport type { CSSProperties, ReactNode } from 'react';\nimport { FieldShell } from './FieldShell';\nimport type { ClearConfig, ClearVisibility } from './clearUtils';\n\ntype TreeSelectProps = React.ComponentProps<typeof TreeSelect>;\n\nexport type ClearableTreeSelectProps = Omit<TreeSelectProps, 'onChange'> & {\n fieldLabel: ReactNode;\n fieldRequired?: boolean;\n clear?: ClearConfig;\n clearable?: boolean;\n clearLabel?: ReactNode;\n clearVisibility?: ClearVisibility;\n onClear?: () => void;\n onValueChange?: (nextValue: TreeSelectProps['value']) => void;\n clearToValue?: TreeSelectProps['value'];\n containerStyle?: CSSProperties;\n fieldActions?: ReactNode;\n};\n\nexport const ClearableTreeSelect = ({\n fieldLabel,\n fieldRequired,\n clear,\n clearable = true,\n clearLabel,\n clearVisibility = 'always',\n onClear,\n onValueChange,\n clearToValue,\n value,\n containerStyle,\n fieldActions,\n id,\n ...treeProps\n}: ClearableTreeSelectProps) => {\n const clearAction = clear?.onClear ?? onClear;\n const clearValue = clearToValue === undefined ? undefined : clearToValue;\n\n const handleClear = () => {\n clearAction?.();\n onValueChange?.(clearValue);\n treeProps.onChange?.(clearValue, null as never, null as never);\n };\n\n return (\n <FieldShell\n label={fieldLabel}\n required={fieldRequired}\n htmlFor={id}\n clear={{\n enabled: clear?.enabled ?? clearable,\n label: clear?.label ?? clearLabel,\n visibility: clear?.visibility ?? clearVisibility,\n onClear: handleClear,\n }}\n clearValue={value}\n extraActions={fieldActions}\n style={containerStyle}\n >\n <TreeSelect\n id={id}\n value={value}\n onChange={(nextValue, label, extra) => {\n treeProps.onChange?.(nextValue, label, extra);\n onValueChange?.(nextValue);\n }}\n style={{ width: '100%', ...treeProps.style }}\n {...treeProps}\n />\n </FieldShell>\n );\n};\n","import { Cascader as AntCascader } from 'antd';\nimport type { CascaderProps as AntCascaderProps } from 'antd';\nimport { useEffect, useMemo } from 'react';\nimport { useCustomIcon } from '../../utils/icons';\n\nexport type CascaderProps = AntCascaderProps;\n\nconst STYLE_ID = 'ds-cascader-styles';\nconst DS_CASCADER_CLASS = 'ds-cascader';\n\nconst ArrowButtonDownIcon = () => useCustomIcon('arrowButtonDown', { size: 10 });\n\nexport const Cascader = ({ suffixIcon, ...props }: CascaderProps) => {\n useEffect(() => {\n if (typeof document !== 'undefined' && !document.getElementById(STYLE_ID)) {\n const style = document.createElement('style');\n style.id = STYLE_ID;\n style.textContent = `\n .${DS_CASCADER_CLASS} .ant-select-arrow,\n .${DS_CASCADER_CLASS} .ant-select-suffix,\n .${DS_CASCADER_CLASS} .ant-cascader-picker-arrow,\n .${DS_CASCADER_CLASS} .ant-cascader-suffix {\n width: 24px;\n height: 24px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n }\n\n .${DS_CASCADER_CLASS} .ant-select-arrow > svg,\n .${DS_CASCADER_CLASS} .ant-select-suffix > svg,\n .${DS_CASCADER_CLASS} .ant-select-arrow > .anticon > svg,\n .${DS_CASCADER_CLASS} .ant-select-suffix > .anticon > svg,\n .${DS_CASCADER_CLASS} .ant-select-arrow svg svg,\n .${DS_CASCADER_CLASS} .ant-select-suffix svg svg,\n .${DS_CASCADER_CLASS} .ant-cascader-picker-arrow > svg,\n .${DS_CASCADER_CLASS} .ant-cascader-suffix > svg,\n .${DS_CASCADER_CLASS} .ant-cascader-picker-arrow > .anticon > svg,\n .${DS_CASCADER_CLASS} .ant-cascader-suffix > .anticon > svg,\n .${DS_CASCADER_CLASS} .ant-cascader-picker-arrow svg svg,\n .${DS_CASCADER_CLASS} .ant-cascader-suffix svg svg {\n width: 10px !important;\n height: 10px !important;\n min-width: 10px;\n min-height: 10px;\n }\n `;\n document.head.appendChild(style);\n }\n }, []);\n\n const resolvedSuffixIcon = useMemo(() => {\n if (suffixIcon !== undefined) {\n return suffixIcon;\n }\n\n return <ArrowButtonDownIcon />;\n }, [suffixIcon]);\n\n const mergedClassName = [DS_CASCADER_CLASS, props.className].filter(Boolean).join(' ');\n\n return <AntCascader {...props} className={mergedClassName} suffixIcon={resolvedSuffixIcon} />;\n};\n\nCascader.displayName = 'Cascader';\n","import type { CSSProperties, ReactNode } from 'react';\nimport { FieldShell } from './FieldShell';\nimport type { ClearConfig, ClearVisibility } from './clearUtils';\nimport { Cascader } from './Cascader';\n\ntype CascaderProps = React.ComponentProps<typeof Cascader>;\n\nexport type ClearableCascaderProps = Omit<CascaderProps, 'onChange'> & {\n fieldLabel: ReactNode;\n fieldRequired?: boolean;\n clear?: ClearConfig;\n clearable?: boolean;\n clearLabel?: ReactNode;\n clearVisibility?: ClearVisibility;\n onClear?: () => void;\n onValueChange?: (nextValue: CascaderProps['value']) => void;\n clearToValue?: CascaderProps['value'];\n containerStyle?: CSSProperties;\n fieldActions?: ReactNode;\n};\n\nexport const ClearableCascader = ({\n fieldLabel,\n fieldRequired,\n clear,\n clearable = true,\n clearLabel,\n clearVisibility = 'always',\n onClear,\n onValueChange,\n clearToValue,\n value,\n containerStyle,\n fieldActions,\n id,\n ...cascaderProps\n}: ClearableCascaderProps) => {\n const clearAction = clear?.onClear ?? onClear;\n const clearValue = clearToValue === undefined ? undefined : clearToValue;\n\n const handleClear = () => {\n clearAction?.();\n onValueChange?.(clearValue);\n cascaderProps.onChange?.(clearValue as never, []);\n };\n\n return (\n <FieldShell\n label={fieldLabel}\n required={fieldRequired}\n htmlFor={id}\n clear={{\n enabled: clear?.enabled ?? clearable,\n label: clear?.label ?? clearLabel,\n visibility: clear?.visibility ?? clearVisibility,\n onClear: handleClear,\n }}\n clearValue={value}\n extraActions={fieldActions}\n style={containerStyle}\n >\n <Cascader\n id={id}\n value={value}\n onChange={(nextValue, selectedOptions) => {\n cascaderProps.onChange?.(nextValue, selectedOptions);\n onValueChange?.(nextValue);\n }}\n style={{ width: '100%', ...cascaderProps.style }}\n {...cascaderProps}\n />\n </FieldShell>\n );\n};\n","import { appTheme } from '../../theme/ontadaTheme';\n\nconst STYLE_ID = 'ds-autocomplete-styles';\nexport const DS_AUTOCOMPLETE_CLASS = 'ds-autocomplete';\n\nconst FONT_FAMILY = appTheme.token?.fontFamily ?? \"'Nunito', sans-serif\";\nexport const DS_AUTOCOMPLETE_FONT_FAMILY = FONT_FAMILY;\n\nexport const mergeAutoCompleteClassNames = (...classNames: Array<string | undefined>): string =>\n classNames.filter(Boolean).join(' ').trim();\n\nexport const ensureAutoCompleteStyles = () => {\n if (typeof document === 'undefined' || document.getElementById(STYLE_ID)) {\n return;\n }\n\n const style = document.createElement('style');\n style.id = STYLE_ID;\n style.textContent = `\n .${DS_AUTOCOMPLETE_CLASS},\n .${DS_AUTOCOMPLETE_CLASS}.ant-select,\n .${DS_AUTOCOMPLETE_CLASS} .ant-select,\n .${DS_AUTOCOMPLETE_CLASS}.ant-select .ant-select-selector,\n .${DS_AUTOCOMPLETE_CLASS} .ant-select-selector,\n .${DS_AUTOCOMPLETE_CLASS}.ant-select .ant-select-selector,\n .${DS_AUTOCOMPLETE_CLASS}.ant-select .ant-select-selection-search,\n .${DS_AUTOCOMPLETE_CLASS}.ant-select .ant-select-selection-search-input,\n .${DS_AUTOCOMPLETE_CLASS}.ant-select .ant-select-selection-item,\n .${DS_AUTOCOMPLETE_CLASS}.ant-select .ant-select-selection-placeholder,\n .${DS_AUTOCOMPLETE_CLASS}.ant-select .ant-select-content,\n .${DS_AUTOCOMPLETE_CLASS}.ant-select .ant-select-input,\n .${DS_AUTOCOMPLETE_CLASS}.ant-select .ant-select-placeholder {\n font-family: ${FONT_FAMILY} !important;\n }\n\n .${DS_AUTOCOMPLETE_CLASS} .ant-select-selection-search,\n .${DS_AUTOCOMPLETE_CLASS} .ant-select-selection-search-input,\n .${DS_AUTOCOMPLETE_CLASS} .ant-select-selection-item,\n .${DS_AUTOCOMPLETE_CLASS} .ant-select-selection-placeholder,\n .${DS_AUTOCOMPLETE_CLASS} .ant-select-content,\n .${DS_AUTOCOMPLETE_CLASS} .ant-select-input,\n .${DS_AUTOCOMPLETE_CLASS} .ant-select-placeholder,\n .${DS_AUTOCOMPLETE_CLASS} input,\n .${DS_AUTOCOMPLETE_CLASS} textarea {\n font-family: inherit !important;\n }\n `;\n\n document.head.appendChild(style);\n};\n","import { AutoComplete as AntAutoComplete } from 'antd';\nimport type { ComponentProps } from 'react';\nimport { useEffect } from 'react';\nimport {\n DS_AUTOCOMPLETE_CLASS,\n DS_AUTOCOMPLETE_FONT_FAMILY,\n ensureAutoCompleteStyles,\n mergeAutoCompleteClassNames,\n} from './autoCompleteStyles';\n\nexport type AutoCompleteProps = ComponentProps<typeof AntAutoComplete>;\n\nexport const AutoComplete = ({ className, style, ...props }: AutoCompleteProps) => {\n useEffect(() => {\n ensureAutoCompleteStyles();\n }, []);\n\n return (\n <AntAutoComplete\n {...props}\n className={mergeAutoCompleteClassNames(DS_AUTOCOMPLETE_CLASS, className)}\n style={{ fontFamily: DS_AUTOCOMPLETE_FONT_FAMILY, ...style }}\n />\n );\n};\n\nAutoComplete.displayName = 'AutoComplete';\n","import { AutoComplete } from 'antd';\nimport type { CSSProperties, ReactNode } from 'react';\nimport { useEffect } from 'react';\nimport { FieldShell } from './FieldShell';\nimport type { ClearConfig, ClearVisibility } from './clearUtils';\nimport {\n DS_AUTOCOMPLETE_CLASS,\n DS_AUTOCOMPLETE_FONT_FAMILY,\n ensureAutoCompleteStyles,\n mergeAutoCompleteClassNames,\n} from './autoCompleteStyles';\n\ntype AutoCompleteProps = React.ComponentProps<typeof AutoComplete>;\n\nexport type ClearableAutoCompleteProps = Omit<AutoCompleteProps, 'onChange'> & {\n fieldLabel: ReactNode;\n fieldRequired?: boolean;\n clear?: ClearConfig;\n clearable?: boolean;\n clearLabel?: ReactNode;\n clearVisibility?: ClearVisibility;\n onClear?: () => void;\n onValueChange?: (nextValue: string) => void;\n containerStyle?: CSSProperties;\n fieldActions?: ReactNode;\n};\n\nexport const ClearableAutoComplete = ({\n fieldLabel,\n fieldRequired,\n clear,\n clearable = true,\n clearLabel,\n clearVisibility = 'always',\n onClear,\n onValueChange,\n value,\n containerStyle,\n fieldActions,\n id,\n className: providedClassName,\n style: providedStyle,\n ...autoCompleteProps\n}: ClearableAutoCompleteProps) => {\n useEffect(() => {\n ensureAutoCompleteStyles();\n }, []);\n\n const clearAction = clear?.onClear ?? onClear;\n\n const handleClear = () => {\n clearAction?.();\n onValueChange?.('');\n autoCompleteProps.onChange?.('');\n };\n\n return (\n <FieldShell\n label={fieldLabel}\n required={fieldRequired}\n htmlFor={id}\n clear={{\n enabled: clear?.enabled ?? clearable,\n label: clear?.label ?? clearLabel,\n visibility: clear?.visibility ?? clearVisibility,\n onClear: handleClear,\n }}\n clearValue={value}\n extraActions={fieldActions}\n style={containerStyle}\n >\n <AutoComplete\n id={id}\n value={value}\n className={mergeAutoCompleteClassNames(DS_AUTOCOMPLETE_CLASS, providedClassName)}\n onChange={(nextValue) => {\n autoCompleteProps.onChange?.(nextValue);\n onValueChange?.(nextValue);\n }}\n style={{ width: '100%', fontFamily: DS_AUTOCOMPLETE_FONT_FAMILY, ...providedStyle }}\n {...autoCompleteProps}\n />\n </FieldShell>\n );\n};\n","import { Mentions } from 'antd';\nimport type { CSSProperties, ReactNode } from 'react';\nimport { FieldShell } from './FieldShell';\nimport type { ClearConfig, ClearVisibility } from './clearUtils';\nimport { dsSemanticTokens } from '../../theme/ontadaTheme';\n\nconst DS_MENTIONS_CLASS = 'ds-clearable-mentions';\nconst DS_MENTIONS_HAS_TAGS_CLASS = 'ds-clearable-mentions-has-tags';\nconst DS_MENTIONS_OVERLAY_CLASS = 'ds-clearable-mentions-overlay';\nconst DS_MENTIONS_TAG_CLASS = 'ds-clearable-mentions-tag';\nconst DS_MENTIONS_STYLE_ID = 'ds-clearable-mentions-style';\n\nconst MENTION_TAG_PATTERN = /(^|\\s)(@[A-Za-z0-9._-]+)/g;\nconst MENTION_TAG_CHECK_PATTERN = /(^|\\s)@[A-Za-z0-9._-]+/;\n\nfunction ensureMentionsStyles() {\n if (typeof document === 'undefined') {\n return;\n }\n\n if (document.getElementById(DS_MENTIONS_STYLE_ID)) {\n return;\n }\n\n const style = document.createElement('style');\n style.id = DS_MENTIONS_STYLE_ID;\n style.textContent = `\n .${DS_MENTIONS_CLASS} {\n position: relative;\n width: 100%;\n }\n\n .${DS_MENTIONS_CLASS} .${DS_MENTIONS_OVERLAY_CLASS} {\n position: absolute;\n inset: 0;\n z-index: 1;\n pointer-events: none;\n white-space: pre-wrap;\n overflow: hidden;\n padding: ${dsSemanticTokens.input.padding.middle.y} ${dsSemanticTokens.input.padding.middle.x};\n color: ${dsSemanticTokens.input.text.focus};\n font-family: var(--ant-font-family);\n font-size: ${dsSemanticTokens.button.typography.small.fontSize};\n font-weight: 400;\n line-height: ${dsSemanticTokens.button.typography.small.lineHeight};\n }\n\n .${DS_MENTIONS_CLASS}.${DS_MENTIONS_HAS_TAGS_CLASS} .ant-mentions > textarea {\n color: transparent !important;\n -webkit-text-fill-color: transparent;\n caret-color: ${dsSemanticTokens.input.text.focus};\n }\n\n .${DS_MENTIONS_CLASS} .${DS_MENTIONS_TAG_CLASS} {\n display: inline-flex;\n align-items: center;\n background: ${dsSemanticTokens.tag.status.new.light.bg};\n color: ${dsSemanticTokens.tag.status.new.light.text};\n border-radius: ${dsSemanticTokens.tag.size.sm.radius}px;\n line-height: ${dsSemanticTokens.button.typography.small.lineHeight};\n max-height: calc(${dsSemanticTokens.button.typography.small.lineHeight} + 2px);\n padding: 0 4px;\n vertical-align: top;\n }\n `;\n\n document.head.appendChild(style);\n}\n\ntype MentionSegment = {\n text: string;\n isTag: boolean;\n};\n\nfunction toMentionSegments(value: string): MentionSegment[] {\n const segments: MentionSegment[] = [];\n let lastIndex = 0;\n\n value.replace(MENTION_TAG_PATTERN, (match, leadingSpace, tag, offset) => {\n const leading = String(leadingSpace ?? '');\n const mention = String(tag ?? '').trim();\n const mentionStart = offset + leading.length;\n\n if (mentionStart > lastIndex) {\n segments.push({ text: value.slice(lastIndex, mentionStart), isTag: false });\n }\n\n if (mention) {\n segments.push({ text: mention, isTag: true });\n }\n\n lastIndex = mentionStart + mention.length;\n return match;\n });\n\n if (lastIndex < value.length) {\n segments.push({ text: value.slice(lastIndex), isTag: false });\n }\n\n return segments.length > 0 ? segments : [{ text: value, isTag: false }];\n}\n\ntype MentionsProps = React.ComponentProps<typeof Mentions>;\n\nexport type ClearableMentionsProps = Omit<MentionsProps, 'onChange'> & {\n fieldLabel: ReactNode;\n fieldRequired?: boolean;\n clear?: ClearConfig;\n clearable?: boolean;\n clearLabel?: ReactNode;\n clearVisibility?: ClearVisibility;\n onClear?: () => void;\n onValueChange?: (nextValue: string) => void;\n containerStyle?: CSSProperties;\n fieldActions?: ReactNode;\n};\n\nexport const ClearableMentions = ({\n fieldLabel,\n fieldRequired,\n clear,\n clearable = true,\n clearLabel,\n clearVisibility = 'always',\n onClear,\n onValueChange,\n value,\n containerStyle,\n fieldActions,\n id,\n className,\n ...mentionsProps\n}: ClearableMentionsProps) => {\n ensureMentionsStyles();\n\n const stringValue = typeof value === 'string' ? value : '';\n const hasMentionTags = MENTION_TAG_CHECK_PATTERN.test(stringValue);\n const mentionSegments = hasMentionTags ? toMentionSegments(stringValue) : [];\n const mergedClassName = [\n className,\n DS_MENTIONS_CLASS,\n hasMentionTags ? DS_MENTIONS_HAS_TAGS_CLASS : undefined,\n ]\n .filter(Boolean)\n .join(' ');\n\n const clearAction = clear?.onClear ?? onClear;\n\n const handleClear = () => {\n clearAction?.();\n onValueChange?.('');\n mentionsProps.onChange?.('');\n };\n\n return (\n <FieldShell\n label={fieldLabel}\n required={fieldRequired}\n htmlFor={id}\n clear={{\n enabled: clear?.enabled ?? clearable,\n label: clear?.label ?? clearLabel,\n visibility: clear?.visibility ?? clearVisibility,\n onClear: handleClear,\n }}\n clearValue={value}\n extraActions={fieldActions}\n style={containerStyle}\n >\n <div className={mergedClassName}>\n {hasMentionTags ? (\n <div aria-hidden=\"true\" className={DS_MENTIONS_OVERLAY_CLASS}>\n {mentionSegments.map((segment, index) =>\n segment.isTag ? (\n <span className={DS_MENTIONS_TAG_CLASS} key={`${index}-${segment.text}`}>\n {segment.text}\n </span>\n ) : (\n <span key={`${index}-${segment.text}`}>{segment.text}</span>\n ),\n )}\n </div>\n ) : null}\n <Mentions\n id={id}\n className={className}\n value={value}\n onChange={(nextValue) => {\n mentionsProps.onChange?.(nextValue);\n onValueChange?.(nextValue);\n }}\n style={{ width: '100%', ...mentionsProps.style }}\n {...mentionsProps}\n />\n </div>\n </FieldShell>\n );\n};\n","import type { CSSProperties, ReactNode } from 'react';\nimport { Checkbox } from './Checkbox';\nimport { FieldShell } from './FieldShell';\nimport type { ClearConfig, ClearVisibility } from './clearUtils';\n\ntype CheckboxProps = React.ComponentProps<typeof Checkbox>;\n\nexport type ClearableCheckboxProps = Omit<CheckboxProps, 'onChange'> & {\n fieldLabel: ReactNode;\n fieldRequired?: boolean;\n clear?: ClearConfig;\n clearable?: boolean;\n clearLabel?: ReactNode;\n clearVisibility?: ClearVisibility;\n onClear?: () => void;\n onValueChange?: (nextValue: boolean) => void;\n containerStyle?: CSSProperties;\n fieldActions?: ReactNode;\n};\n\nexport const ClearableCheckbox = ({\n fieldLabel,\n fieldRequired,\n clear,\n clearable = true,\n clearLabel,\n clearVisibility = 'always',\n onClear,\n onValueChange,\n checked,\n children,\n containerStyle,\n fieldActions,\n id,\n ...checkboxProps\n}: ClearableCheckboxProps) => {\n const clearAction = clear?.onClear ?? onClear;\n\n const handleClear = () => {\n clearAction?.();\n onValueChange?.(false);\n };\n\n return (\n <FieldShell\n label={fieldLabel}\n required={fieldRequired}\n htmlFor={id}\n clear={{\n enabled: clear?.enabled ?? clearable,\n label: clear?.label ?? clearLabel,\n visibility: clear?.visibility ?? clearVisibility,\n onClear: handleClear,\n }}\n clearValue={checked}\n extraActions={fieldActions}\n style={containerStyle}\n >\n <Checkbox\n id={id}\n checked={checked}\n onChange={(event) => {\n checkboxProps.onChange?.(event);\n onValueChange?.(event.target.checked);\n }}\n {...checkboxProps}\n >\n {children}\n </Checkbox>\n </FieldShell>\n );\n};\n","import { Radio } from 'antd';\nimport type { CSSProperties, ReactNode } from 'react';\nimport { FieldShell } from './FieldShell';\nimport type { ClearConfig, ClearVisibility } from './clearUtils';\n\ntype RadioProps = React.ComponentProps<typeof Radio>;\n\nexport type ClearableRadioProps = Omit<RadioProps, 'onChange'> & {\n fieldLabel: ReactNode;\n fieldRequired?: boolean;\n clear?: ClearConfig;\n clearable?: boolean;\n clearLabel?: ReactNode;\n clearVisibility?: ClearVisibility;\n onClear?: () => void;\n onValueChange?: (nextValue: boolean) => void;\n containerStyle?: CSSProperties;\n fieldActions?: ReactNode;\n};\n\nexport const ClearableRadio = ({\n fieldLabel,\n fieldRequired,\n clear,\n clearable = true,\n clearLabel,\n clearVisibility = 'always',\n onClear,\n onValueChange,\n checked,\n children,\n containerStyle,\n fieldActions,\n id,\n ...radioProps\n}: ClearableRadioProps) => {\n const clearAction = clear?.onClear ?? onClear;\n\n const handleClear = () => {\n clearAction?.();\n onValueChange?.(false);\n };\n\n return (\n <FieldShell\n label={fieldLabel}\n required={fieldRequired}\n htmlFor={id}\n clear={{\n enabled: clear?.enabled ?? clearable,\n label: clear?.label ?? clearLabel,\n visibility: clear?.visibility ?? clearVisibility,\n onClear: handleClear,\n }}\n clearValue={checked}\n extraActions={fieldActions}\n style={containerStyle}\n >\n <Radio\n id={id}\n checked={checked}\n onChange={(event) => {\n radioProps.onChange?.(event);\n onValueChange?.(event.target.checked);\n }}\n {...radioProps}\n >\n {children}\n </Radio>\n </FieldShell>\n );\n};\n","import { Radio } from 'antd';\nimport type { CSSProperties, ReactNode } from 'react';\nimport { FieldShell } from './FieldShell';\nimport type { ClearConfig, ClearVisibility } from './clearUtils';\n\ntype RadioGroupProps = React.ComponentProps<typeof Radio.Group>;\n\nexport type ClearableRadioGroupProps = Omit<RadioGroupProps, 'onChange'> & {\n fieldLabel: ReactNode;\n fieldRequired?: boolean;\n clear?: ClearConfig;\n clearable?: boolean;\n clearLabel?: ReactNode;\n clearVisibility?: ClearVisibility;\n onClear?: () => void;\n onValueChange?: (nextValue: RadioGroupProps['value']) => void;\n clearToValue?: RadioGroupProps['value'];\n containerStyle?: CSSProperties;\n fieldActions?: ReactNode;\n};\n\nexport const ClearableRadioGroup = ({\n fieldLabel,\n fieldRequired,\n clear,\n clearable = true,\n clearLabel,\n clearVisibility = 'always',\n onClear,\n onValueChange,\n clearToValue,\n value,\n containerStyle,\n fieldActions,\n ...radioProps\n}: ClearableRadioGroupProps) => {\n const clearAction = clear?.onClear ?? onClear;\n\n const handleClear = () => {\n clearAction?.();\n onValueChange?.(clearToValue);\n };\n\n return (\n <FieldShell\n label={fieldLabel}\n required={fieldRequired}\n clear={{\n enabled: clear?.enabled ?? clearable,\n label: clear?.label ?? clearLabel,\n visibility: clear?.visibility ?? clearVisibility,\n onClear: handleClear,\n }}\n clearValue={value}\n extraActions={fieldActions}\n style={containerStyle}\n >\n <Radio.Group\n value={value}\n onChange={(event) => {\n radioProps.onChange?.(event);\n onValueChange?.(event.target.value);\n }}\n {...radioProps}\n />\n </FieldShell>\n );\n};\n","import { Switch } from 'antd';\nimport type { CSSProperties, ReactNode } from 'react';\nimport { FieldShell } from './FieldShell';\nimport type { ClearConfig, ClearVisibility } from './clearUtils';\n\ntype SwitchProps = React.ComponentProps<typeof Switch>;\n\nexport type ClearableSwitchProps = Omit<SwitchProps, 'onChange'> & {\n fieldLabel: ReactNode;\n fieldRequired?: boolean;\n clear?: ClearConfig;\n clearable?: boolean;\n clearLabel?: ReactNode;\n clearVisibility?: ClearVisibility;\n onClear?: () => void;\n onValueChange?: (nextValue: boolean) => void;\n clearToValue?: boolean;\n containerStyle?: CSSProperties;\n fieldActions?: ReactNode;\n};\n\nexport const ClearableSwitch = ({\n fieldLabel,\n fieldRequired,\n clear,\n clearable = true,\n clearLabel,\n clearVisibility = 'always',\n onClear,\n onValueChange,\n clearToValue = false,\n checked,\n containerStyle,\n fieldActions,\n id,\n ...switchProps\n}: ClearableSwitchProps) => {\n const clearAction = clear?.onClear ?? onClear;\n\n const handleClear = () => {\n clearAction?.();\n onValueChange?.(clearToValue);\n };\n\n return (\n <FieldShell\n label={fieldLabel}\n required={fieldRequired}\n htmlFor={id}\n clear={{\n enabled: clear?.enabled ?? clearable,\n label: clear?.label ?? clearLabel,\n visibility: clear?.visibility ?? clearVisibility,\n onClear: handleClear,\n }}\n clearValue={checked}\n extraActions={fieldActions}\n style={containerStyle}\n >\n <Switch\n id={id}\n checked={checked}\n onChange={(nextChecked, event) => {\n switchProps.onChange?.(nextChecked, event);\n onValueChange?.(nextChecked);\n }}\n {...switchProps}\n />\n </FieldShell>\n );\n};\n","import { Slider } from 'antd';\nimport type { CSSProperties, ReactNode } from 'react';\nimport { FieldShell } from './FieldShell';\nimport type { ClearConfig, ClearVisibility } from './clearUtils';\n\ntype SliderProps = React.ComponentProps<typeof Slider>;\ntype SliderValue = SliderProps['value'];\n\nexport type ClearableSliderProps = Omit<SliderProps, 'onChange'> & {\n fieldLabel: ReactNode;\n fieldRequired?: boolean;\n clear?: ClearConfig;\n clearable?: boolean;\n clearLabel?: ReactNode;\n clearVisibility?: ClearVisibility;\n onClear?: () => void;\n onValueChange?: (nextValue: SliderValue) => void;\n clearToValue?: SliderValue;\n containerStyle?: CSSProperties;\n fieldActions?: ReactNode;\n};\n\nexport const ClearableSlider = ({\n fieldLabel,\n fieldRequired,\n clear,\n clearable = true,\n clearLabel,\n clearVisibility = 'always',\n onClear,\n onValueChange,\n clearToValue,\n value,\n min,\n containerStyle,\n fieldActions,\n ...sliderProps\n}: ClearableSliderProps) => {\n const clearAction = clear?.onClear ?? onClear;\n const fallbackClear = clearToValue ?? min ?? 0;\n\n const handleClear = () => {\n clearAction?.();\n onValueChange?.(fallbackClear);\n };\n\n return (\n <FieldShell\n label={fieldLabel}\n required={fieldRequired}\n clear={{\n enabled: clear?.enabled ?? clearable,\n label: clear?.label ?? clearLabel,\n visibility: clear?.visibility ?? clearVisibility,\n onClear: handleClear,\n }}\n clearValue={value}\n extraActions={fieldActions}\n style={containerStyle}\n >\n <Slider\n value={value}\n min={min}\n onChange={(nextValue) => {\n sliderProps.onChange?.(nextValue);\n onValueChange?.(nextValue);\n }}\n {...sliderProps}\n />\n </FieldShell>\n );\n};\n","import { Rate } from 'antd';\nimport type { CSSProperties, ReactNode } from 'react';\nimport { FieldShell } from './FieldShell';\nimport type { ClearConfig, ClearVisibility } from './clearUtils';\n\ntype RateProps = React.ComponentProps<typeof Rate>;\n\nexport type ClearableRateProps = Omit<RateProps, 'onChange'> & {\n fieldLabel: ReactNode;\n fieldRequired?: boolean;\n clear?: ClearConfig;\n clearable?: boolean;\n clearLabel?: ReactNode;\n clearVisibility?: ClearVisibility;\n onClear?: () => void;\n onValueChange?: (nextValue: number) => void;\n clearToValue?: number;\n containerStyle?: CSSProperties;\n fieldActions?: ReactNode;\n};\n\nexport const ClearableRate = ({\n fieldLabel,\n fieldRequired,\n clear,\n clearable = true,\n clearLabel,\n clearVisibility = 'always',\n onClear,\n onValueChange,\n clearToValue = 0,\n value,\n containerStyle,\n fieldActions,\n ...rateProps\n}: ClearableRateProps) => {\n const clearAction = clear?.onClear ?? onClear;\n\n const handleClear = () => {\n clearAction?.();\n onValueChange?.(clearToValue);\n };\n\n return (\n <FieldShell\n label={fieldLabel}\n required={fieldRequired}\n clear={{\n enabled: clear?.enabled ?? clearable,\n label: clear?.label ?? clearLabel,\n visibility: clear?.visibility ?? clearVisibility,\n onClear: handleClear,\n }}\n clearValue={value}\n extraActions={fieldActions}\n style={containerStyle}\n >\n <Rate\n value={value}\n onChange={(nextValue) => {\n rateProps.onChange?.(nextValue);\n onValueChange?.(nextValue);\n }}\n {...rateProps}\n />\n </FieldShell>\n );\n};\n","import { ColorPicker } from 'antd';\nimport type { CSSProperties, ReactNode } from 'react';\nimport { FieldShell } from './FieldShell';\nimport type { ClearConfig, ClearVisibility } from './clearUtils';\n\ntype ColorPickerProps = React.ComponentProps<typeof ColorPicker>;\n\ntype ColorValue = ColorPickerProps['value'];\n\nexport type ClearableColorPickerProps = Omit<ColorPickerProps, 'onChange'> & {\n fieldLabel: ReactNode;\n fieldRequired?: boolean;\n clear?: ClearConfig;\n clearable?: boolean;\n clearLabel?: ReactNode;\n clearVisibility?: ClearVisibility;\n onClear?: () => void;\n onValueChange?: (nextValue: ColorValue) => void;\n clearToValue?: ColorValue;\n containerStyle?: CSSProperties;\n fieldActions?: ReactNode;\n};\n\nexport const ClearableColorPicker = ({\n fieldLabel,\n fieldRequired,\n clear,\n clearable = true,\n clearLabel,\n clearVisibility = 'always',\n onClear,\n onValueChange,\n clearToValue,\n value,\n containerStyle,\n fieldActions,\n ...colorProps\n}: ClearableColorPickerProps) => {\n const clearAction = clear?.onClear ?? onClear;\n\n const handleClear = () => {\n clearAction?.();\n onValueChange?.(clearToValue);\n };\n\n return (\n <FieldShell\n label={fieldLabel}\n required={fieldRequired}\n clear={{\n enabled: clear?.enabled ?? clearable,\n label: clear?.label ?? clearLabel,\n visibility: clear?.visibility ?? clearVisibility,\n onClear: handleClear,\n }}\n clearValue={value}\n extraActions={fieldActions}\n style={containerStyle}\n >\n <ColorPicker\n value={value}\n onChange={(nextValue) => {\n colorProps.onChange?.(nextValue);\n onValueChange?.(nextValue);\n }}\n {...colorProps}\n />\n </FieldShell>\n );\n};\n","import { Transfer } from 'antd';\nimport type { CSSProperties, ReactNode } from 'react';\nimport { FieldShell } from './FieldShell';\nimport type { ClearConfig, ClearVisibility } from './clearUtils';\n\ntype TransferProps = React.ComponentProps<typeof Transfer>;\n\ntype TransferTargetKeys = TransferProps['targetKeys'];\n\nexport type ClearableTransferProps = Omit<TransferProps, 'onChange'> & {\n fieldLabel: ReactNode;\n fieldRequired?: boolean;\n clear?: ClearConfig;\n clearable?: boolean;\n clearLabel?: ReactNode;\n clearVisibility?: ClearVisibility;\n onClear?: () => void;\n onValueChange?: (nextValue: TransferTargetKeys) => void;\n clearToValue?: TransferTargetKeys;\n containerStyle?: CSSProperties;\n fieldActions?: ReactNode;\n};\n\nexport const ClearableTransfer = ({\n fieldLabel,\n fieldRequired,\n clear,\n clearable = true,\n clearLabel,\n clearVisibility = 'always',\n onClear,\n onValueChange,\n clearToValue = [],\n targetKeys,\n containerStyle,\n fieldActions,\n ...transferProps\n}: ClearableTransferProps) => {\n const clearAction = clear?.onClear ?? onClear;\n\n const handleClear = () => {\n clearAction?.();\n onValueChange?.(clearToValue);\n };\n\n return (\n <FieldShell\n label={fieldLabel}\n required={fieldRequired}\n clear={{\n enabled: clear?.enabled ?? clearable,\n label: clear?.label ?? clearLabel,\n visibility: clear?.visibility ?? clearVisibility,\n onClear: handleClear,\n }}\n clearValue={targetKeys}\n extraActions={fieldActions}\n style={containerStyle}\n >\n <Transfer\n targetKeys={targetKeys}\n onChange={(nextTargetKeys, direction, moveKeys) => {\n transferProps.onChange?.(nextTargetKeys, direction, moveKeys);\n onValueChange?.(nextTargetKeys);\n }}\n {...transferProps}\n />\n </FieldShell>\n );\n};\n","import { Upload } from 'antd';\nimport type { CSSProperties, ReactNode } from 'react';\nimport { FieldShell } from './FieldShell';\nimport type { ClearConfig, ClearVisibility } from './clearUtils';\n\ntype UploadProps = React.ComponentProps<typeof Upload>;\n\ntype UploadFileList = UploadProps['fileList'];\n\nexport type ClearableUploadProps = Omit<UploadProps, 'onChange'> & {\n fieldLabel: ReactNode;\n fieldRequired?: boolean;\n clear?: ClearConfig;\n clearable?: boolean;\n clearLabel?: ReactNode;\n clearVisibility?: ClearVisibility;\n onClear?: () => void;\n onValueChange?: (nextValue: UploadFileList) => void;\n clearToValue?: UploadFileList;\n containerStyle?: CSSProperties;\n fieldActions?: ReactNode;\n};\n\nexport const ClearableUpload = ({\n fieldLabel,\n fieldRequired,\n clear,\n clearable = true,\n clearLabel,\n clearVisibility = 'always',\n onClear,\n onValueChange,\n clearToValue = [],\n fileList,\n children,\n containerStyle,\n fieldActions,\n ...uploadProps\n}: ClearableUploadProps) => {\n const clearAction = clear?.onClear ?? onClear;\n\n const handleClear = () => {\n clearAction?.();\n onValueChange?.(clearToValue);\n };\n\n return (\n <FieldShell\n label={fieldLabel}\n required={fieldRequired}\n clear={{\n enabled: clear?.enabled ?? clearable,\n label: clear?.label ?? clearLabel,\n visibility: clear?.visibility ?? clearVisibility,\n onClear: handleClear,\n }}\n clearValue={fileList}\n extraActions={fieldActions}\n style={containerStyle}\n >\n <Upload\n fileList={fileList}\n onChange={(info) => {\n uploadProps.onChange?.(info);\n onValueChange?.(info.fileList);\n }}\n {...uploadProps}\n >\n {children}\n </Upload>\n </FieldShell>\n );\n};\n","import { Breadcrumb as AntBreadcrumb, Dropdown, Typography } from 'antd';\nimport { cloneElement, isValidElement, useEffect, useRef, useState } from 'react';\nimport type { ComponentProps, MouseEvent, ReactNode } from 'react';\nimport { dsSemanticTokens } from '../../theme/ontadaTheme';\nimport { Icon } from '../../utils/icons';\n\ntype AntBreadcrumbProps = ComponentProps<typeof AntBreadcrumb>;\ntype BreadcrumbItem = NonNullable<AntBreadcrumbProps['items']>[number];\ntype CollapseMode = 'count' | 'responsive';\ntype DSBreadcrumbSize = 'sm' | 'md' | 'lg';\n\nconst STYLE_ID = 'ds-breadcrumb-styles';\nconst DS_BREADCRUMB_CLASS = 'ds-breadcrumb';\n\nconst ensureBreadcrumbStyles = () => {\n if (typeof document === 'undefined' || document.getElementById(STYLE_ID)) {\n return;\n }\n\n const { breadcrumb } = dsSemanticTokens;\n\n const style = document.createElement('style');\n style.id = STYLE_ID;\n style.textContent = `\n .${DS_BREADCRUMB_CLASS}.ant-breadcrumb {\n --ds-breadcrumb-link-default: ${breadcrumb.link.default};\n --ds-breadcrumb-link-hover: ${breadcrumb.link.hover};\n --ds-breadcrumb-current-text: ${breadcrumb.current.text};\n --ds-breadcrumb-separator-color: ${breadcrumb.separator.color};\n --ds-breadcrumb-separator-size: ${breadcrumb.separator.size};\n\n --ds-breadcrumb-font-family: ${breadcrumb.typography.family};\n --ds-breadcrumb-font-weight: ${breadcrumb.typography.weight};\n\n --ds-breadcrumb-font-size-sm: ${breadcrumb.typography.sm.fontSize};\n --ds-breadcrumb-line-height-sm: ${breadcrumb.typography.sm.lineHeight};\n --ds-breadcrumb-letter-spacing-sm: ${breadcrumb.typography.sm.letterSpacing};\n\n --ds-breadcrumb-font-size-md: ${breadcrumb.typography.md.fontSize};\n --ds-breadcrumb-line-height-md: ${breadcrumb.typography.md.lineHeight};\n --ds-breadcrumb-letter-spacing-md: ${breadcrumb.typography.md.letterSpacing};\n\n --ds-breadcrumb-font-size-lg: ${breadcrumb.typography.lg.fontSize};\n --ds-breadcrumb-line-height-lg: ${breadcrumb.typography.lg.lineHeight};\n --ds-breadcrumb-letter-spacing-lg: ${breadcrumb.typography.lg.letterSpacing};\n\n --ds-breadcrumb-separator-gap-sm: ${breadcrumb.separator.gap.sm};\n --ds-breadcrumb-separator-gap-md: ${breadcrumb.separator.gap.md};\n --ds-breadcrumb-separator-gap-lg: ${breadcrumb.separator.gap.lg};\n }\n\n .${DS_BREADCRUMB_CLASS}.ant-breadcrumb {\n color: var(--ds-breadcrumb-current-text);\n }\n\n .${DS_BREADCRUMB_CLASS}.ant-breadcrumb,\n .${DS_BREADCRUMB_CLASS}.ant-breadcrumb .ant-breadcrumb-link,\n .${DS_BREADCRUMB_CLASS}.ant-breadcrumb .ant-breadcrumb-link > a,\n .${DS_BREADCRUMB_CLASS}.ant-breadcrumb .ant-breadcrumb-link > span,\n .${DS_BREADCRUMB_CLASS}.ant-breadcrumb .ant-breadcrumb-separator,\n .${DS_BREADCRUMB_CLASS}.ant-breadcrumb .ant-breadcrumb-overlay-link {\n font-family: var(--ds-breadcrumb-font-family);\n font-weight: var(--ds-breadcrumb-font-weight);\n }\n\n .${DS_BREADCRUMB_CLASS}[data-ds-size='sm'].ant-breadcrumb,\n .${DS_BREADCRUMB_CLASS}[data-ds-size='sm'].ant-breadcrumb .ant-breadcrumb-link,\n .${DS_BREADCRUMB_CLASS}[data-ds-size='sm'].ant-breadcrumb .ant-breadcrumb-link > a,\n .${DS_BREADCRUMB_CLASS}[data-ds-size='sm'].ant-breadcrumb .ant-breadcrumb-link > span,\n .${DS_BREADCRUMB_CLASS}[data-ds-size='sm'].ant-breadcrumb .ant-breadcrumb-separator,\n .${DS_BREADCRUMB_CLASS}[data-ds-size='sm'].ant-breadcrumb .ant-breadcrumb-overlay-link {\n font-size: var(--ds-breadcrumb-font-size-sm);\n line-height: var(--ds-breadcrumb-line-height-sm);\n letter-spacing: var(--ds-breadcrumb-letter-spacing-sm);\n }\n\n .${DS_BREADCRUMB_CLASS}[data-ds-size='md'].ant-breadcrumb,\n .${DS_BREADCRUMB_CLASS}[data-ds-size='md'].ant-breadcrumb .ant-breadcrumb-link,\n .${DS_BREADCRUMB_CLASS}[data-ds-size='md'].ant-breadcrumb .ant-breadcrumb-link > a,\n .${DS_BREADCRUMB_CLASS}[data-ds-size='md'].ant-breadcrumb .ant-breadcrumb-link > span,\n .${DS_BREADCRUMB_CLASS}[data-ds-size='md'].ant-breadcrumb .ant-breadcrumb-separator,\n .${DS_BREADCRUMB_CLASS}[data-ds-size='md'].ant-breadcrumb .ant-breadcrumb-overlay-link {\n font-size: var(--ds-breadcrumb-font-size-md);\n line-height: var(--ds-breadcrumb-line-height-md);\n letter-spacing: var(--ds-breadcrumb-letter-spacing-md);\n }\n\n .${DS_BREADCRUMB_CLASS}[data-ds-size='lg'].ant-breadcrumb,\n .${DS_BREADCRUMB_CLASS}[data-ds-size='lg'].ant-breadcrumb .ant-breadcrumb-link,\n .${DS_BREADCRUMB_CLASS}[data-ds-size='lg'].ant-breadcrumb .ant-breadcrumb-link > a,\n .${DS_BREADCRUMB_CLASS}[data-ds-size='lg'].ant-breadcrumb .ant-breadcrumb-link > span,\n .${DS_BREADCRUMB_CLASS}[data-ds-size='lg'].ant-breadcrumb .ant-breadcrumb-separator,\n .${DS_BREADCRUMB_CLASS}[data-ds-size='lg'].ant-breadcrumb .ant-breadcrumb-overlay-link {\n font-size: var(--ds-breadcrumb-font-size-lg);\n line-height: var(--ds-breadcrumb-line-height-lg);\n letter-spacing: var(--ds-breadcrumb-letter-spacing-lg);\n }\n\n .${DS_BREADCRUMB_CLASS}.ant-breadcrumb a.ant-breadcrumb-link,\n .${DS_BREADCRUMB_CLASS}.ant-breadcrumb a.ant-breadcrumb-link:visited,\n .${DS_BREADCRUMB_CLASS}.ant-breadcrumb .ant-breadcrumb-link > a,\n .${DS_BREADCRUMB_CLASS}.ant-breadcrumb .ant-breadcrumb-link > a:visited {\n color: var(--ds-breadcrumb-link-default);\n text-decoration: none;\n }\n\n .${DS_BREADCRUMB_CLASS}.ant-breadcrumb a.ant-breadcrumb-link:hover,\n .${DS_BREADCRUMB_CLASS}.ant-breadcrumb .ant-breadcrumb-link > a:hover {\n color: var(--ds-breadcrumb-link-hover);\n background: transparent !important;\n background-color: transparent !important;\n text-decoration: none;\n }\n\n .${DS_BREADCRUMB_CLASS}.ant-breadcrumb .ant-breadcrumb-link:hover,\n .${DS_BREADCRUMB_CLASS}.ant-breadcrumb .ant-breadcrumb-overlay-link:hover,\n .${DS_BREADCRUMB_CLASS}.ant-breadcrumb a:hover {\n background: transparent !important;\n background-color: transparent !important;\n }\n\n .${DS_BREADCRUMB_CLASS}.ant-breadcrumb[data-has-trail='true'] .ant-breadcrumb-item:last-child .ant-breadcrumb-link,\n .${DS_BREADCRUMB_CLASS}.ant-breadcrumb[data-has-trail='true'] .ant-breadcrumb-item:last-child .ant-breadcrumb-link > span,\n .${DS_BREADCRUMB_CLASS}.ant-breadcrumb[data-has-trail='true'] .ant-breadcrumb-item:last-child .ant-breadcrumb-link > a {\n color: var(--ds-breadcrumb-current-text);\n }\n\n .${DS_BREADCRUMB_CLASS}[data-ds-size='sm'].ant-breadcrumb .ant-breadcrumb-separator {\n margin-inline: var(--ds-breadcrumb-separator-gap-sm);\n color: var(--ds-breadcrumb-separator-color);\n }\n\n .${DS_BREADCRUMB_CLASS}[data-ds-size='md'].ant-breadcrumb .ant-breadcrumb-separator {\n margin-inline: var(--ds-breadcrumb-separator-gap-md);\n color: var(--ds-breadcrumb-separator-color);\n }\n\n .${DS_BREADCRUMB_CLASS}[data-ds-size='lg'].ant-breadcrumb .ant-breadcrumb-separator {\n margin-inline: var(--ds-breadcrumb-separator-gap-lg);\n color: var(--ds-breadcrumb-separator-color);\n }\n\n .${DS_BREADCRUMB_CLASS}.ant-breadcrumb .ds-breadcrumb-separator-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n color: var(--ds-breadcrumb-separator-color);\n line-height: 1;\n vertical-align: middle;\n }\n\n `;\n\n document.head.appendChild(style);\n};\n\nexport type BreadcrumbProps = Omit<AntBreadcrumbProps, 'items'> & {\n items: BreadcrumbItem[];\n collapseMode?: CollapseMode;\n dsSize?: DSBreadcrumbSize;\n maxVisibleItems?: number;\n responsiveBreakpoint?: number;\n preserveStartCount?: number;\n preserveEndCount?: number;\n ellipsisLabel?: ReactNode;\n};\n\nconst defaultEllipsisLabel = (\n <Typography.Text aria-label=\"Collapsed breadcrumb items\" strong>\n ...\n </Typography.Text>\n);\n\nconst isAnchorElement = (title: ReactNode) =>\n isValidElement<{ style?: Record<string, string | number> }>(title) && title.type === 'a';\n\nconst getCurrentItemTitle = (item: BreadcrumbItem): ReactNode => {\n if (isAnchorElement(item.title)) {\n return item.title.props.children;\n }\n\n return item.title;\n};\n\nconst getLinkedItemTitle = (item: BreadcrumbItem): ReactNode => {\n if (isAnchorElement(item.title)) {\n return cloneElement(item.title, {\n style: {\n ...(item.title.props.style ?? {}),\n },\n });\n }\n\n const href = item.href ?? '#';\n const onClick = item.href\n ? undefined\n : (event: MouseEvent<HTMLAnchorElement>) => {\n event.preventDefault();\n };\n\n return <a href={href} onClick={onClick}>{item.title}</a>;\n};\n\nconst normalizeBreadcrumbItems = (items: BreadcrumbItem[]): BreadcrumbItem[] =>\n items.map((item, index) => {\n const hasTrail = items.length > 1;\n const isCurrentItem = hasTrail && index === items.length - 1;\n\n if (isCurrentItem) {\n return {\n ...item,\n href: undefined,\n title: getCurrentItemTitle(item),\n };\n }\n\n if (item.menu) {\n return item;\n }\n\n if (item.href) {\n return {\n ...item,\n title: getCurrentItemTitle(item),\n };\n }\n\n return {\n ...item,\n title: getLinkedItemTitle(item),\n };\n });\n\nconst toMenuItem = (item: BreadcrumbItem, index: number) => ({\n key: `${index}-${typeof item.title === 'string' ? item.title : 'item'}`,\n label: getLinkedItemTitle(item),\n disabled: Boolean(item.menu),\n});\n\nexport const Breadcrumb = ({\n items,\n collapseMode = 'count',\n dsSize = 'md',\n maxVisibleItems = 4,\n responsiveBreakpoint = 768,\n preserveStartCount = 1,\n preserveEndCount = 2,\n ellipsisLabel,\n ...breadcrumbProps\n}: BreadcrumbProps) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const [containerWidth, setContainerWidth] = useState<number | null>(null);\n\n useEffect(() => {\n ensureBreadcrumbStyles();\n }, []);\n\n useEffect(() => {\n if (collapseMode !== 'responsive' || typeof ResizeObserver === 'undefined') {\n return;\n }\n\n const node = containerRef.current;\n if (!node) {\n return;\n }\n\n const observer = new ResizeObserver((entries) => {\n const nextWidth = entries[0]?.contentRect.width;\n if (typeof nextWidth === 'number') {\n setContainerWidth(nextWidth);\n }\n });\n\n observer.observe(node);\n setContainerWidth(node.getBoundingClientRect().width);\n\n return () => observer.disconnect();\n }, [collapseMode]);\n\n const shouldCollapse =\n collapseMode === 'responsive'\n ? items.length > preserveStartCount + preserveEndCount &&\n containerWidth !== null &&\n containerWidth < responsiveBreakpoint\n : items.length > maxVisibleItems;\n\n const hasTrail = items.length > 1;\n\n const clickableItems = normalizeBreadcrumbItems(items);\n\n const normalizedItems = shouldCollapse\n ? (() => {\n const firstItems = clickableItems.slice(0, preserveStartCount);\n const trailingItems = clickableItems.slice(clickableItems.length - preserveEndCount);\n const middleItems = clickableItems.slice(\n preserveStartCount,\n clickableItems.length - preserveEndCount,\n );\n\n if (middleItems.length === 0) {\n return clickableItems;\n }\n\n const collapsedTrigger: BreadcrumbItem = {\n title: (\n <Dropdown\n trigger={['click']}\n menu={{\n items: middleItems.map(toMenuItem),\n }}\n >\n <span style={{ cursor: 'pointer' }}>{ellipsisLabel ?? defaultEllipsisLabel}</span>\n </Dropdown>\n ),\n };\n\n return [...firstItems, collapsedTrigger, ...trailingItems];\n })()\n : clickableItems;\n\n const separatorSize = Number.parseInt(dsSemanticTokens.breadcrumb.separator.size, 10) || 10;\n const defaultSeparator = (\n <span className=\"ds-breadcrumb-separator-icon\" aria-hidden=\"true\">\n <Icon name=\"arrowRight1\" size={separatorSize} style={{ color: 'inherit' }} />\n </span>\n );\n\n const resolvedSeparator = breadcrumbProps.separator ?? defaultSeparator;\n\n return (\n <div ref={containerRef}>\n <AntBreadcrumb\n {...breadcrumbProps}\n items={normalizedItems}\n separator={resolvedSeparator}\n className={[DS_BREADCRUMB_CLASS, breadcrumbProps.className].filter(Boolean).join(' ')}\n data-ds-size={dsSize}\n data-has-trail={hasTrail ? 'true' : 'false'}\n />\n </div>\n );\n};\n","import { Anchor as AntAnchor } from 'antd';\nimport type { AnchorProps as AntAnchorProps } from 'antd';\nimport { useEffect } from 'react';\n\nexport type AnchorProps = AntAnchorProps;\n\nconst STYLE_ID = 'ds-anchor-styles';\nconst DS_ANCHOR_CLASS = 'ds-anchor';\n\nfunction mergeClassNames(...classNames: Array<string | undefined>) {\n return classNames.filter(Boolean).join(' ');\n}\n\nfunction injectStyles() {\n if (typeof document === 'undefined') return;\n if (document.getElementById(STYLE_ID)) return;\n\n const style = document.createElement('style');\n style.id = STYLE_ID;\n style.textContent = `\n .${DS_ANCHOR_CLASS}.ant-anchor-wrapper:not(.ant-anchor-wrapper-horizontal) .ant-anchor .ant-anchor-ink {\n transition: none !important;\n }\n\n .${DS_ANCHOR_CLASS}.ant-anchor-wrapper-horizontal .ant-anchor .ant-anchor-ink {\n transition: none !important;\n }\n `;\n\n document.head.appendChild(style);\n}\n\nexport const Anchor = ({ className, ...props }: AnchorProps) => {\n useEffect(() => {\n injectStyles();\n }, []);\n\n return <AntAnchor {...props} className={mergeClassNames(DS_ANCHOR_CLASS, className)} />;\n};\n\nAnchor.displayName = 'Anchor';\n","import React, { useEffect } from 'react';\nimport { Pagination as AntPagination, type PaginationProps as AntPaginationProps } from 'antd';\nimport { Icon } from '../../utils/icons';\nimport { dsSemanticTokens } from '../../theme/ontadaTheme';\n\nexport interface DSPaginationProps extends Omit<AntPaginationProps, 'size'> {\n /**\n * Pagination size. Note: Ant's 'size' prop is retained for design system control.\n * @default 'default'\n */\n size?: 'small' | 'default';\n /**\n * Optional responsive configuration for different breakpoints.\n * When true, uses recommended page limits: 9 pages on desktop, 5-6 on mobile/tablet.\n * @default false\n */\n dsResponsive?: boolean;\n}\n\nconst STYLE_ID = 'ds-pagination-styles';\n\nfunction injectStyles() {\n if (typeof document === 'undefined') return;\n const { pagination } = dsSemanticTokens;\n let style = document.getElementById(STYLE_ID) as HTMLStyleElement | null;\n if (!style) {\n style = document.createElement('style');\n style.id = STYLE_ID;\n document.head.appendChild(style);\n }\n\n style.textContent = `\n .ds-pagination {\n display: flex;\n gap: ${pagination.spacing.gap};\n align-items: center;\n }\n\n .ds-pagination .ant-pagination {\n display: flex;\n gap: ${pagination.spacing.gap};\n align-items: center;\n margin: 0;\n }\n\n .ds-pagination .ant-pagination-item {\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n padding: 4px 9px !important;\n border-radius: 16px !important;\n background: transparent !important;\n border: 1px solid transparent !important;\n outline: none !important;\n box-shadow: none !important;\n transition: none !important;\n -webkit-tap-highlight-color: transparent !important;\n min-width: 0 !important;\n height: auto !important;\n width: auto !important;\n aspect-ratio: auto !important;\n line-height: 1 !important;\n margin-inline-end: 0 !important;\n }\n\n .ds-pagination .ant-pagination-item a {\n color: ${pagination.text.default} !important;\n font-weight: ${pagination.typography.item.fontWeight} !important;\n font-size: ${pagination.typography.item.fontSize} !important;\n line-height: ${pagination.typography.item.lineHeight} !important;\n font-family: \"Nunito\", sans-serif !important;\n letter-spacing: ${pagination.typography.item.letterSpacing} !important;\n width: auto !important;\n min-width: 0 !important;\n height: auto !important;\n padding: 0 !important;\n outline: none !important;\n box-shadow: none !important;\n transition: none !important;\n -webkit-tap-highlight-color: transparent !important;\n }\n\n .ds-pagination .ant-pagination-item a:focus,\n .ds-pagination .ant-pagination-item a:focus-visible,\n .ds-pagination .ant-pagination-item:focus,\n .ds-pagination .ant-pagination-item:focus-visible {\n outline: none !important;\n box-shadow: none !important;\n }\n\n .ds-pagination .ant-pagination-item-active {\n background: ${pagination.surface.activeBg} !important;\n border: 1px solid ${pagination.surface.activeBorder} !important;\n }\n\n .ds-pagination .ant-pagination-item-active a {\n color: ${pagination.text.active} !important;\n font-weight: ${pagination.typography.item.activeWeight} !important;\n }\n\n .ds-pagination .ant-pagination-item:hover {\n background: ${pagination.surface.hoverBg} !important;\n border: 1px solid transparent !important;\n outline: none !important;\n box-shadow: none !important;\n }\n\n .ds-pagination .ant-pagination-item-active:hover {\n outline: none !important;\n box-shadow: none !important;\n background: ${pagination.surface.activeBg} !important;\n border: 1px solid ${pagination.surface.activeBorder} !important;\n }\n\n .ds-pagination .ant-pagination-prev,\n .ds-pagination .ant-pagination-next {\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n width: ${pagination.iconControl.width} !important;\n height: ${pagination.iconControl.height} !important;\n min-width: ${pagination.iconControl.width} !important;\n flex: 0 0 ${pagination.iconControl.width} !important;\n padding: 0 !important;\n margin: 0 !important;\n margin-inline-end: 0 !important;\n background: transparent !important;\n border: none !important;\n color: ${pagination.text.default} !important;\n line-height: 1 !important;\n transition: none !important;\n outline: none !important;\n box-shadow: none !important;\n -webkit-tap-highlight-color: transparent !important;\n }\n\n .ds-pagination .ant-pagination-item-link {\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n width: ${pagination.iconControl.width} !important;\n height: ${pagination.iconControl.height} !important;\n min-width: ${pagination.iconControl.width} !important;\n color: inherit !important;\n transition: none !important;\n -webkit-tap-highlight-color: transparent !important;\n }\n\n .ds-pagination .ds-pagination-arrow-icon {\n display: inline-flex !important;\n align-items: center !important;\n justify-content: center !important;\n width: ${pagination.iconControl.width} !important;\n height: ${pagination.iconControl.height} !important;\n color: inherit !important;\n line-height: 1 !important;\n pointer-events: none;\n }\n\n .ds-pagination .ant-pagination-item-link,\n .ds-pagination .ant-pagination-item-link:focus,\n .ds-pagination .ant-pagination-item-link:focus-visible,\n .ds-pagination .ant-pagination-item-link:active {\n outline: none !important;\n box-shadow: none !important;\n -webkit-tap-highlight-color: transparent !important;\n }\n\n .ds-pagination .ant-pagination-prev:hover,\n .ds-pagination .ant-pagination-next:hover,\n .ds-pagination .ant-pagination-item:not(.ant-pagination-item-active):hover {\n color: ${pagination.text.hover} !important;\n }\n\n .ds-pagination .ant-pagination-prev.ant-pagination-disabled,\n .ds-pagination .ant-pagination-next.ant-pagination-disabled {\n color: ${pagination.text.disabled} !important;\n cursor: not-allowed !important;\n transition: none !important;\n }\n\n .ds-pagination .ant-pagination-jump-prev,\n .ds-pagination .ant-pagination-jump-next {\n transition: none !important;\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n padding: 4px 9px !important;\n border-radius: ${pagination.radius.jump} !important;\n background: transparent !important;\n border: none !important;\n margin-inline-start: 0 !important;\n margin-inline-end: 0 !important;\n }\n\n .ds-pagination .ant-pagination-jump-prev a,\n .ds-pagination .ant-pagination-jump-next a {\n display: inline-flex !important;\n align-items: center !important;\n justify-content: center !important;\n margin: 0 !important;\n padding: 0 !important;\n min-width: 0 !important;\n color: ${pagination.text.default} !important;\n font-weight: ${pagination.typography.jump.fontWeight} !important;\n font-size: ${pagination.typography.jump.fontSize} !important;\n line-height: ${pagination.typography.jump.lineHeight} !important;\n }\n\n .ds-pagination .ant-pagination-jump-prev .ant-pagination-item-container,\n .ds-pagination .ant-pagination-jump-next .ant-pagination-item-container {\n display: inline-flex !important;\n align-items: center !important;\n justify-content: center !important;\n margin: 0 !important;\n padding: 0 !important;\n min-width: 0 !important;\n gap: 0 !important;\n }\n\n .ds-pagination .ant-pagination-jump-prev .ant-pagination-item-link-icon,\n .ds-pagination .ant-pagination-jump-next .ant-pagination-item-link-icon {\n display: none !important;\n opacity: 0 !important;\n visibility: hidden !important;\n }\n\n .ds-pagination .ant-pagination-jump-prev .ant-pagination-item-ellipsis,\n .ds-pagination .ant-pagination-jump-next .ant-pagination-item-ellipsis {\n position: static !important;\n inset: auto !important;\n display: inline-flex !important;\n align-items: center !important;\n justify-content: center !important;\n width: auto !important;\n min-width: 0 !important;\n height: auto !important;\n margin: 0 !important;\n padding: 0 !important;\n opacity: 1 !important;\n visibility: visible !important;\n }\n\n .ds-pagination .ant-pagination-options {\n display: flex !important;\n gap: ${pagination.spacing.optionsGap} !important;\n align-items: center !important;\n margin-left: ${pagination.spacing.optionsOffset} !important;\n }\n\n .ds-pagination .ant-pagination-options-size-changer {\n display: flex !important;\n align-items: center !important;\n }\n\n .ds-pagination .ant-pagination-options-quick-jumper {\n display: flex !important;\n align-items: center !important;\n gap: 8px !important;\n }\n\n .ds-pagination .ant-pagination-options-quick-jumper input {\n width: ${pagination.quickJumper.inputWidth} !important;\n min-width: ${pagination.quickJumper.inputWidth} !important;\n padding: 4px 8px !important;\n border: 1px solid ${pagination.text.disabled} !important;\n border-radius: ${pagination.radius.input} !important;\n font-size: ${pagination.typography.jump.fontSize} !important;\n text-align: center !important;\n }\n `;\n}\n\n/**\n * DSPagination\n * \n * Design system wrapper for Ant Design's Pagination component.\n * Provides consistent styling, sizing, and responsive behavior\n * while allowing full pass-through of Ant's pagination API.\n * \n * Design tokens applied:\n * - Selected page: #faf5e2 background, #f7c91e border\n * - Unselected page: #007cc1 text color\n * - Text: 16px, semibold unselected / bold selected\n * - Gap: 16px between items\n * - Border radius: 16px\n * \n * Canonical variants:\n * - Default: Standard pagination with 2-9 pages (desktop)\n * - Mobile: Reduced page numbers (5-6 pages max)\n * - With quick jumper: For navigating many pages\n * - With size changer: For changing results per page\n */\nexport const Pagination: React.FC<DSPaginationProps> = ({\n size = 'default',\n dsResponsive = false,\n showQuickJumper = false,\n showSizeChanger = false,\n simple = false,\n className,\n ...antProps\n}) => {\n useEffect(() => {\n injectStyles();\n }, []);\n\n const itemRender: AntPaginationProps['itemRender'] = (_, type, originalElement) => {\n if (type === 'prev') {\n return (\n <span className=\"ds-pagination-arrow-icon\" aria-hidden=\"true\">\n <Icon name=\"arrowLeft1\" size={dsSemanticTokens.pagination.iconControl.iconSize} style={{ color: 'inherit' }} />\n </span>\n );\n }\n\n if (type === 'next') {\n return (\n <span className=\"ds-pagination-arrow-icon\" aria-hidden=\"true\">\n <Icon name=\"arrowRight1\" size={dsSemanticTokens.pagination.iconControl.iconSize} style={{ color: 'inherit' }} />\n </span>\n );\n }\n\n return originalElement;\n };\n\n // Apply design system defaults while preserving Ant prop pass-through\n return (\n <AntPagination\n className={`ds-pagination ${className || ''}`}\n size={size}\n showQuickJumper={showQuickJumper}\n showSizeChanger={showSizeChanger}\n simple={simple}\n itemRender={itemRender}\n {...antProps}\n />\n );\n};\n\nexport default Pagination;\n","const STYLE_ID = 'ds-steps-styles';\n\nexport const DS_STEPS_CLASS = 'ds-steps';\n\nexport const mergeStepsClassNames = (...classNames: Array<string | undefined>): string =>\n classNames.filter(Boolean).join(' ').trim();\n\nexport const ensureStepsStyles = () => {\n if (typeof document === 'undefined' || document.getElementById(STYLE_ID)) {\n return;\n }\n\n const style = document.createElement('style');\n style.id = STYLE_ID;\n style.textContent = `\n .${DS_STEPS_CLASS}.ant-steps {\n --ds-steps-complete: #4aa564;\n --ds-steps-progress: #627386;\n --ds-steps-next: #c7ced6;\n --ds-steps-line-complete: #627386;\n --ds-steps-line-wait: #d5dbe1;\n --ds-steps-text: #1e394e;\n --ds-steps-error: #c53026;\n }\n\n .${DS_STEPS_CLASS}.ant-steps .ant-steps-item-tail::after {\n height: 2px !important;\n background-image: none !important;\n background: var(--ds-steps-line-wait) !important;\n }\n\n .${DS_STEPS_CLASS}.ant-steps .ant-steps-item-rail {\n border-color: var(--ds-steps-line-wait) !important;\n border-top-color: var(--ds-steps-line-wait) !important;\n border-top-width: 2px !important;\n }\n\n .${DS_STEPS_CLASS}.ant-steps .ant-steps-item-rail-process,\n .${DS_STEPS_CLASS}.ant-steps .ant-steps-item-rail-wait {\n border-color: var(--ds-steps-line-wait) !important;\n border-top-color: var(--ds-steps-line-wait) !important;\n }\n\n .${DS_STEPS_CLASS}.ant-steps .ant-steps-item-rail-finish {\n border-color: var(--ds-steps-line-complete) !important;\n border-top-color: var(--ds-steps-line-complete) !important;\n }\n\n .${DS_STEPS_CLASS}.ant-steps .ant-steps-item-finish .ant-steps-item-rail-process {\n border-color: var(--ds-steps-line-complete) !important;\n border-top-color: var(--ds-steps-line-complete) !important;\n }\n\n .${DS_STEPS_CLASS}.ant-steps .ant-steps-item-process > .ant-steps-item-container > .ant-steps-item-tail::after,\n .${DS_STEPS_CLASS}.ant-steps .ant-steps-item-wait > .ant-steps-item-container > .ant-steps-item-tail::after,\n .${DS_STEPS_CLASS}.ant-steps .ant-steps-item-process .ant-steps-item-tail::after,\n .${DS_STEPS_CLASS}.ant-steps .ant-steps-item-wait .ant-steps-item-tail::after {\n background-image: none !important;\n background: var(--ds-steps-line-wait) !important;\n }\n\n .${DS_STEPS_CLASS}.ant-steps .ant-steps-item-finish > .ant-steps-item-container > .ant-steps-item-tail::after,\n .${DS_STEPS_CLASS}.ant-steps .ant-steps-item-finish .ant-steps-item-tail::after {\n background-image: none !important;\n background: var(--ds-steps-line-complete) !important;\n }\n\n .${DS_STEPS_CLASS}.ant-steps.ant-steps-horizontal.ant-steps-label-vertical .ant-steps-item-tail {\n top: 11px !important;\n padding: 0 !important;\n inset-inline-start: calc(50% + 12px) !important;\n inset-inline-end: calc(-50% + 12px) !important;\n width: auto !important;\n }\n\n .${DS_STEPS_CLASS}.ant-steps.ant-steps-horizontal.ant-steps-title-vertical > .ant-steps-item .ant-steps-item-rail {\n margin-top: 12px !important;\n width: calc(100% - 24px) !important;\n inset-inline-start: calc(50% + 8px) !important;\n }\n\n .${DS_STEPS_CLASS}.ant-steps.ant-steps-horizontal.ant-steps-label-vertical .ant-steps-item-icon {\n margin-inline-end: 0 !important;\n }\n\n .${DS_STEPS_CLASS}.ant-steps.ant-steps-horizontal.ant-steps-label-vertical.ant-steps-small .ant-steps-item-tail {\n top: 7px !important;\n inset-inline-start: calc(50% + 8px) !important;\n inset-inline-end: calc(-50% + 8px) !important;\n }\n\n .${DS_STEPS_CLASS}.ant-steps.ant-steps-horizontal.ant-steps-title-vertical.ant-steps-small > .ant-steps-item .ant-steps-item-rail {\n margin-top: 8px !important;\n width: calc(100% - 16px) !important;\n inset-inline-start: calc(50% + 5px) !important;\n }\n\n .${DS_STEPS_CLASS}.ant-steps.ant-steps-horizontal.ant-steps-label-vertical .ant-steps-item-container {\n display: flex !important;\n flex-direction: column !important;\n align-items: center !important;\n }\n\n .${DS_STEPS_CLASS}.ant-steps.ant-steps-horizontal.ant-steps-label-vertical .ant-steps-item-content {\n width: auto !important;\n margin-top: 8px !important;\n text-align: center !important;\n min-width: 52px !important;\n }\n\n .${DS_STEPS_CLASS}.ant-steps .ant-steps-item-icon {\n width: 24px !important;\n height: 24px !important;\n margin-inline-end: 8px !important;\n border: 0 !important;\n background: var(--ds-steps-next) !important;\n display: inline-flex !important;\n align-items: center !important;\n justify-content: center !important;\n box-shadow: none !important;\n }\n\n .${DS_STEPS_CLASS}.ant-steps.ant-steps-small .ant-steps-item-icon {\n width: 16px !important;\n height: 16px !important;\n margin-inline-end: 6px !important;\n }\n\n .${DS_STEPS_CLASS}.ant-steps .ant-steps-item-process .ant-steps-item-icon {\n background: var(--ds-steps-progress) !important;\n color: #ffffff !important;\n }\n\n .${DS_STEPS_CLASS}.ant-steps .ant-steps-item-finish .ant-steps-item-icon {\n background: var(--ds-steps-complete) !important;\n color: #ffffff !important;\n }\n\n .${DS_STEPS_CLASS}.ant-steps .ant-steps-item-error .ant-steps-item-icon {\n background: var(--ds-steps-error) !important;\n }\n\n .${DS_STEPS_CLASS}.ant-steps .ant-steps-item:not(.ant-steps-item-custom) .ant-steps-item-icon .ant-steps-icon {\n color: #ffffff !important;\n font-size: 0 !important;\n line-height: 1 !important;\n }\n\n .${DS_STEPS_CLASS}.ant-steps .ant-steps-item-finish:not(.ant-steps-item-custom) .ant-steps-item-icon .ant-steps-icon .anticon {\n font-size: 11px !important;\n color: #ffffff !important;\n }\n\n .${DS_STEPS_CLASS}.ant-steps .ant-steps-item-finish:not(.ant-steps-item-custom) .ant-steps-item-icon .anticon {\n color: #ffffff !important;\n }\n\n .${DS_STEPS_CLASS}.ant-steps .ant-steps-item-finish:not(.ant-steps-item-custom) .ant-steps-item-icon .ant-steps-icon .anticon svg,\n .${DS_STEPS_CLASS}.ant-steps .ant-steps-item-finish:not(.ant-steps-item-custom) .ant-steps-item-icon .ant-steps-icon .anticon path {\n fill: currentColor !important;\n stroke: currentColor !important;\n }\n\n .${DS_STEPS_CLASS}.ant-steps .ant-steps-item-title {\n color: var(--ds-steps-text) !important;\n font-size: 14px !important;\n font-weight: 600 !important;\n line-height: 18px !important;\n letter-spacing: 0 !important;\n padding-right: 0 !important;\n }\n\n .${DS_STEPS_CLASS}.ant-steps.ant-steps-small .ant-steps-item-title {\n font-size: 12px !important;\n line-height: 16px !important;\n letter-spacing: 0.012px !important;\n }\n\n .${DS_STEPS_CLASS}.ant-steps .ant-steps-item-title::after {\n display: none !important;\n }\n\n .${DS_STEPS_CLASS}.ant-steps .ant-steps-item-description {\n color: #3c5c6e !important;\n font-size: 12px !important;\n line-height: 16px !important;\n }\n `;\n\n document.head.appendChild(style);\n};\n","import { Steps as AntSteps } from 'antd';\nimport type { StepsProps } from 'antd';\nimport { useEffect } from 'react';\nimport { DS_STEPS_CLASS, ensureStepsStyles, mergeStepsClassNames } from './stepsStyles';\n\nexport type DSStepsVariant = 'ant' | 'ontada-progress';\n\nexport type DSStepsProps = StepsProps & {\n /** Opt-in DS styling variant. Defaults to Ant-native rendering. */\n dsVariant?: DSStepsVariant;\n};\n\nexport const Steps = ({\n className: providedClassName,\n dsVariant = 'ant',\n ...props\n}: DSStepsProps) => {\n useEffect(() => {\n ensureStepsStyles();\n }, []);\n\n const isDsVariant = dsVariant === 'ontada-progress';\n const mergedClassName = mergeStepsClassNames(\n isDsVariant ? DS_STEPS_CLASS : undefined,\n providedClassName,\n );\n const resolvedLabelPlacement =\n isDsVariant\n ? props.labelPlacement ?? (props.direction === 'vertical' ? undefined : 'vertical')\n : props.labelPlacement;\n\n return <AntSteps {...props} labelPlacement={resolvedLabelPlacement} className={mergedClassName} />;\n};\n\nSteps.displayName = 'Steps';\n","import { Tabs as AntTabs } from 'antd';\nimport type { TabsProps as AntTabsProps } from 'antd';\nimport { useEffect, useRef } from 'react';\nimport { dsSemanticTokens } from '../../theme/ontadaTheme';\n\nexport type DSTabsSize = 'sm' | 'md' | 'lg';\nexport type DSTabsLayout = 'default-hug' | 'equal-width';\n\nexport type TabsProps = AntTabsProps & {\n /** DS tab size mapped from Figma menu tab variants. */\n dsSize?: DSTabsSize;\n /** DS layout mode: intrinsic tab widths or equal-width tabs. */\n dsLayout?: DSTabsLayout;\n /** DS underline baseline under the tab row. */\n dsUnderline?: boolean;\n};\n\nconst STYLE_ID = 'ds-tabs-styles';\nconst LABEL_STABILITY_ATTR = 'data-ds-tab-label';\nconst TAB_HORIZONTAL_PADDING_PX = 16;\n\nconst SIZE_TOKENS: Record<DSTabsSize, {\n tabHeight: string;\n fontSize: string;\n lineHeight: string;\n letterSpacingActive: string;\n letterSpacingInactive: string;\n}> = {\n sm: {\n tabHeight: '36px',\n fontSize: '12px',\n lineHeight: '16px',\n letterSpacingActive: '0.54px',\n letterSpacingInactive: '0.48px',\n },\n md: {\n tabHeight: '40px',\n fontSize: '14px',\n lineHeight: '18px',\n letterSpacingActive: '0.56px',\n letterSpacingInactive: '0.49px',\n },\n lg: {\n tabHeight: '44px',\n fontSize: '16px',\n lineHeight: '20px',\n letterSpacingActive: '0.56px',\n letterSpacingInactive: '0.48px',\n },\n};\n\nfunction injectStyles() {\n if (typeof document === 'undefined') return;\n if (document.getElementById(STYLE_ID)) return;\n\n const { tabs } = dsSemanticTokens;\n\n const style = document.createElement('style');\n style.id = STYLE_ID;\n style.textContent = `\n [data-ds-tabs].ant-tabs .ant-tabs-nav {\n margin: 0;\n }\n\n [data-ds-tabs].ant-tabs .ant-tabs-tab {\n margin: 0;\n padding: 0 16px;\n height: var(--ds-tabs-height);\n align-items: center;\n }\n\n [data-ds-tabs].ant-tabs .ant-tabs-tab-btn {\n display: inline-grid;\n color: ${tabs.text.inactive};\n font-size: var(--ds-tabs-font-size);\n font-weight: 600;\n line-height: var(--ds-tabs-line-height);\n letter-spacing: var(--ds-tabs-letter-inactive);\n text-transform: uppercase;\n }\n\n /* Reserve width using a hidden bold clone to prevent layout shift on activation. */\n [data-ds-tabs].ant-tabs .ant-tabs-tab-btn::after {\n content: attr(${LABEL_STABILITY_ATTR});\n font-size: inherit;\n font-weight: 700;\n line-height: inherit;\n letter-spacing: var(--ds-tabs-letter-active);\n text-transform: inherit;\n visibility: hidden;\n pointer-events: none;\n height: 0;\n overflow: hidden;\n }\n\n [data-ds-tabs].ant-tabs .ant-tabs-tab.ant-tabs-tab-active .ant-tabs-tab-btn {\n color: ${tabs.text.active};\n font-weight: 700;\n letter-spacing: var(--ds-tabs-letter-active);\n }\n\n [data-ds-tabs].ant-tabs .ant-tabs-ink-bar {\n height: 4px;\n background: ${tabs.indicator.active};\n }\n\n [data-ds-tabs].ant-tabs .ant-tabs-ink-bar,\n [data-ds-tabs].ant-tabs .ant-tabs-tab,\n [data-ds-tabs].ant-tabs .ant-tabs-tab-btn,\n [data-ds-tabs].ant-tabs .ant-tabs-content,\n [data-ds-tabs].ant-tabs .ant-tabs-tabpane {\n transition: none !important;\n animation: none !important;\n }\n\n [data-ds-tabs].ant-tabs-top > .ant-tabs-content-holder {\n margin-top: 24px;\n }\n\n [data-ds-tabs][data-ds-underline='true'].ant-tabs-top > .ant-tabs-nav::before,\n [data-ds-tabs][data-ds-underline='true'].ant-tabs-bottom > .ant-tabs-nav::before {\n border-bottom: 1px solid ${tabs.indicator.baseline};\n }\n\n [data-ds-tabs][data-ds-underline='false'].ant-tabs-top > .ant-tabs-nav::before,\n [data-ds-tabs][data-ds-underline='false'].ant-tabs-bottom > .ant-tabs-nav::before {\n border-bottom: none;\n }\n\n [data-ds-tabs][data-ds-layout='equal-width'].ant-tabs-top .ant-tabs-nav-list,\n [data-ds-tabs][data-ds-layout='equal-width'].ant-tabs-bottom .ant-tabs-nav-list {\n width: 100%;\n display: flex;\n }\n\n [data-ds-tabs][data-ds-layout='equal-width'].ant-tabs-top .ant-tabs-tab,\n [data-ds-tabs][data-ds-layout='equal-width'].ant-tabs-bottom .ant-tabs-tab {\n flex: 1 1 0;\n justify-content: center;\n }\n\n [data-ds-tabs][data-ds-layout='equal-width'].ant-tabs-top .ant-tabs-tab-btn,\n [data-ds-tabs][data-ds-layout='equal-width'].ant-tabs-bottom .ant-tabs-tab-btn {\n text-align: center;\n }\n `;\n\n document.head.appendChild(style);\n}\n\nfunction syncTabLabelStabilityAttrs(root: HTMLElement | null) {\n if (!root) return;\n\n const tabButtons = root.querySelectorAll<HTMLElement>('.ant-tabs-tab-btn');\n tabButtons.forEach((button) => {\n const label = (button.textContent ?? '').replace(/\\s+/g, ' ').trim();\n button.setAttribute(LABEL_STABILITY_ATTR, label);\n });\n}\n\nexport const Tabs = ({\n dsSize = 'md',\n dsLayout = 'default-hug',\n dsUnderline = false,\n indicator,\n style,\n className,\n ...props\n}: TabsProps) => {\n const rootRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n injectStyles();\n\n syncTabLabelStabilityAttrs(rootRef.current);\n\n const observer = new MutationObserver(() => {\n syncTabLabelStabilityAttrs(rootRef.current);\n });\n\n if (rootRef.current) {\n observer.observe(rootRef.current, {\n subtree: true,\n childList: true,\n characterData: true,\n });\n }\n\n return () => {\n observer.disconnect();\n };\n }, []);\n\n const tokens = SIZE_TOKENS[dsSize];\n const resolvedIndicator = indicator ?? {\n size: (origin: number) => Math.max(origin - TAB_HORIZONTAL_PADDING_PX * 2, 0),\n align: 'center' as const,\n };\n\n return (\n <div ref={rootRef}>\n <AntTabs\n {...props}\n className={className}\n animated={false}\n indicator={resolvedIndicator}\n style={{\n ...style,\n ['--ds-tabs-height' as string]: tokens.tabHeight,\n ['--ds-tabs-font-size' as string]: tokens.fontSize,\n ['--ds-tabs-line-height' as string]: tokens.lineHeight,\n ['--ds-tabs-letter-active' as string]: tokens.letterSpacingActive,\n ['--ds-tabs-letter-inactive' as string]: tokens.letterSpacingInactive,\n }}\n data-ds-tabs\n data-ds-size={dsSize}\n data-ds-layout={dsLayout}\n data-ds-underline={dsUnderline ? 'true' : 'false'}\n />\n </div>\n );\n};\n","import React, { useEffect } from 'react';\nimport { Tag as AntTag } from 'antd';\nimport type { TagProps as AntTagProps } from 'antd';\nimport type { CSSProperties } from 'react';\nimport { dsSemanticTokens } from '../../theme/ontadaTheme';\n\nexport type DSTagStatus = 'neutral' | 'success' | 'warning' | 'error' | 'inactive' | 'new';\nexport type DSTagVariant = 'solid' | 'light' | 'outline';\nexport type DSTagSize = 'sm' | 'md' | 'lg';\n\n/**\n * Ant visual props replaced by DS semantic API.\n * Use dsStatus + dsVariant instead of color/variant/bordered.\n */\ntype RestrictedAntProps = 'color' | 'variant' | 'bordered';\n\nexport type TagProps = Omit<AntTagProps, RestrictedAntProps> & {\n /** DS semantic status — drives background, text, and border color. */\n dsStatus?: DSTagStatus;\n /** DS visual style — solid filled, light tinted, or outline only. */\n dsVariant?: DSTagVariant;\n /** DS size — sm (12px), md (14px, default), lg (16px). */\n dsSize?: DSTagSize;\n};\n\nconst STYLE_ID = 'ds-tag-styles';\n\nfunction injectStyles() {\n if (typeof document === 'undefined') return;\n\n const { tag } = dsSemanticTokens;\n\n let style = document.getElementById(STYLE_ID) as HTMLStyleElement | null;\n if (!style) {\n style = document.createElement('style');\n style.id = STYLE_ID;\n document.head.appendChild(style);\n }\n\n style.textContent = `\n .ds-tag.ant-tag {\n margin-inline-end: 0;\n transition: none;\n }\n\n .ds-tag.ant-tag .ant-tag-close-icon {\n margin-inline-start: 0;\n transition: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n line-height: 1;\n color: inherit;\n }\n\n .ds-tag.ant-tag[data-ds-size='sm'] .ant-tag-close-icon {\n width: ${tag.closeIcon.size.sm};\n height: ${tag.closeIcon.size.sm};\n font-size: ${tag.closeIcon.size.sm};\n }\n\n .ds-tag.ant-tag[data-ds-size='md'] .ant-tag-close-icon {\n width: ${tag.closeIcon.size.md};\n height: ${tag.closeIcon.size.md};\n font-size: ${tag.closeIcon.size.md};\n }\n\n .ds-tag.ant-tag[data-ds-size='lg'] .ant-tag-close-icon {\n width: ${tag.closeIcon.size.lg};\n height: ${tag.closeIcon.size.lg};\n font-size: ${tag.closeIcon.size.lg};\n }\n `;\n}\n\nfunction buildStyles(\n status: DSTagStatus,\n variant: DSTagVariant,\n size: DSTagSize,\n userStyle: CSSProperties,\n): CSSProperties {\n const { tag } = dsSemanticTokens;\n const palette = tag.status[status][variant];\n const sizeTokens = tag.size[size];\n const typeTokens = sizeTokens.typography;\n\n const base: CSSProperties = {\n fontWeight: tag.typography.fontWeight,\n textTransform: tag.typography.textTransform,\n fontFamily: 'inherit',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: sizeTokens.padding,\n borderRadius: sizeTokens.radius,\n fontSize: typeTokens.fontSize,\n lineHeight: typeTokens.lineHeight,\n letterSpacing: typeTokens.letterSpacing,\n boxSizing: 'border-box',\n border: 'none',\n color: palette.text,\n backgroundColor: palette.bg ?? 'transparent',\n };\n\n if (variant === 'outline' || palette.border) {\n base.border = `${tag.borderWidth} solid ${palette.border}`;\n }\n\n return { ...base, ...userStyle };\n}\n\n// ─── Component ───────────────────────────────────────────────────────────────\n\n/**\n * DS Tag — semantic status badge extending Ant Design's Tag.\n *\n * Use `dsStatus` + `dsVariant` + `dsSize` to drive all visual styling.\n * Ant Design's `color`, `variant`, and `bordered` props are intentionally\n * excluded so DS variants remain the source of truth.\n *\n * @example\n * <Tag dsStatus=\"success\" dsVariant=\"solid\">Active</Tag>\n * <Tag dsStatus=\"error\" dsVariant=\"outline\" dsSize=\"sm\">Error</Tag>\n * <Tag dsStatus=\"warning\" dsVariant=\"light\" dsSize=\"lg\">Warning</Tag>\n */\nexport const Tag = ({\n dsStatus = 'neutral',\n dsVariant = 'solid',\n dsSize = 'md',\n style: userStyle = {},\n className: userClassName = '',\n children,\n ...restProps\n}: TagProps) => {\n useEffect(() => {\n injectStyles();\n }, []);\n\n const computedStyles = buildStyles(dsStatus, dsVariant, dsSize, userStyle);\n const className = `ds-tag${userClassName ? ` ${userClassName}` : ''}`;\n\n return (\n <AntTag\n style={computedStyles}\n className={className}\n data-ds-status={dsStatus}\n data-ds-variant={dsVariant}\n data-ds-size={dsSize}\n {...restProps}\n >\n {children}\n </AntTag>\n );\n};\n\nTag.displayName = 'Tag';\nTag.CheckableTag = AntTag.CheckableTag;\n","import { Tooltip as AntTooltip } from 'antd';\nimport type { TooltipProps as AntTooltipProps } from 'antd';\nimport { useEffect } from 'react';\nimport type { ReactNode } from 'react';\nimport { dsSemanticTokens } from '../../theme/ontadaTheme';\n\nexport type DSTooltipSize = 'mini' | 'normal';\n\nexport type TooltipProps = AntTooltipProps & {\n /** DS size variant from Figma. */\n dsSize?: DSTooltipSize;\n /** Optional DS title text for normal tooltip variant. */\n dsTitle?: string;\n /** DS body text used when Ant `title` prop is not provided. */\n dsBody?: string;\n};\n\nconst STYLE_ID = 'ds-tooltip-styles';\n\nfunction injectStyles() {\n if (typeof document === 'undefined') return;\n const { tooltip } = dsSemanticTokens;\n let style = document.getElementById(STYLE_ID) as HTMLStyleElement | null;\n if (!style) {\n style = document.createElement('style');\n style.id = STYLE_ID;\n document.head.appendChild(style);\n }\n\n style.textContent = `\n .ds-tooltip-overlay .ant-tooltip-container {\n background: ${tooltip.surface.background};\n border-radius: ${tooltip.radius};\n filter: ${tooltip.elevation};\n color: ${tooltip.surface.body};\n letter-spacing: 0;\n max-width: ${tooltip.width.normal.max};\n min-width: ${tooltip.width.normal.min};\n padding: ${tooltip.padding.normal};\n }\n\n .ds-tooltip-overlay .ant-tooltip-arrow .ant-tooltip-arrow-content {\n background: ${tooltip.surface.background};\n width: ${tooltip.arrow.width};\n height: ${tooltip.arrow.height};\n }\n\n .ds-tooltip-overlay .ant-tooltip-arrow {\n width: ${tooltip.arrow.width};\n height: ${tooltip.arrow.height};\n }\n\n .ds-tooltip-overlay.ds-tooltip-size-mini .ant-tooltip-container {\n min-width: ${tooltip.width.mini.min};\n max-width: ${tooltip.width.mini.max};\n padding: ${tooltip.padding.mini};\n text-align: center;\n }\n\n .ds-tooltip-title {\n margin: 0 0 4px;\n color: ${tooltip.surface.title};\n font-size: ${tooltip.typography.title.fontSize};\n font-weight: ${tooltip.typography.title.fontWeight};\n line-height: ${tooltip.typography.title.lineHeight};\n }\n\n .ds-tooltip-body {\n margin: 0;\n color: ${tooltip.surface.body};\n font-size: ${tooltip.typography.body.fontSize};\n font-weight: ${tooltip.typography.body.fontWeight};\n line-height: ${tooltip.typography.body.lineHeight};\n }\n\n .ds-tooltip-content {\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n\n .ds-tooltip-content-mini {\n align-items: center;\n }\n `;\n}\n\nfunction getDefaultContent(dsSize: DSTooltipSize, dsTitle: string | undefined, dsBody: string) {\n if (dsSize === 'mini') {\n return (\n <div className=\"ds-tooltip-content ds-tooltip-content-mini\">\n <p className=\"ds-tooltip-body\">{dsBody}</p>\n </div>\n );\n }\n\n return (\n <div className=\"ds-tooltip-content\">\n {dsTitle ? <p className=\"ds-tooltip-title\">{dsTitle}</p> : null}\n <p className=\"ds-tooltip-body\">{dsBody}</p>\n </div>\n );\n}\n\nfunction mergeClassNames(...names: Array<string | undefined>) {\n return names.filter(Boolean).join(' ');\n}\n\nexport const Tooltip = ({\n dsSize = 'normal',\n dsTitle,\n dsBody,\n title,\n color,\n arrow,\n styles,\n classNames,\n overlayClassName,\n children,\n ...props\n}: TooltipProps) => {\n const { tooltip } = dsSemanticTokens;\n\n useEffect(() => {\n injectStyles();\n }, []);\n\n const defaultBody = dsSize === 'mini'\n ? 'Mini Tooltip'\n : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla pellentesque fermentum dolor eget.';\n\n const resolvedBody = dsBody ?? defaultBody;\n const resolvedTitle: ReactNode =\n title !== undefined\n ? title\n : getDefaultContent(dsSize, dsTitle, resolvedBody);\n\n const sizeBodyStyles = dsSize === 'mini'\n ? {\n minWidth: tooltip.width.mini.min,\n maxWidth: tooltip.width.mini.max,\n padding: tooltip.padding.mini,\n textAlign: 'center' as const,\n }\n : {\n minWidth: tooltip.width.normal.min,\n maxWidth: tooltip.width.normal.max,\n padding: tooltip.padding.normal,\n };\n\n return (\n <AntTooltip\n {...props}\n title={resolvedTitle}\n color={color ?? tooltip.surface.background}\n arrow={arrow ?? true}\n styles={{\n ...styles,\n body: {\n borderRadius: tooltip.radius,\n color: tooltip.surface.body,\n letterSpacing: 0,\n ...sizeBodyStyles,\n ...styles?.body,\n },\n }}\n classNames={{\n ...classNames,\n root: mergeClassNames('ds-tooltip-overlay', `ds-tooltip-size-${dsSize}`, classNames?.root, overlayClassName),\n }}\n >\n {children}\n </AntTooltip>\n );\n};\n","import React, { useEffect } from 'react';\nimport { Table as AntTable, type TableProps as AntTableProps } from 'antd';\nimport { Input } from 'antd';\nimport { dsSemanticTokens } from '../../theme/ontadaTheme';\nimport { Icon } from '../../utils/icons';\nimport { Tooltip as DSTooltip } from './Tooltip';\nimport type { DSTooltipSize } from './Tooltip';\n\nexport type DSTableStyle = 'styleA' | 'styleAEditable' | 'styleACustomizable' | 'styleB';\nexport type DSTableHeaderVariant = 'default' | 'white';\nexport type DSTableFrozenColumns = 'none' | 'first' | 'last' | 'both';\n\nexport type DSTableProps<RecordType = Record<string, unknown>> = AntTableProps<RecordType> & {\n /**\n * DS table style from Figma documentation.\n * styleA: full-width, white header, thicker header divider, no container border.\n * styleAEditable: styleA base with inline editable cells for selected columns.\n * styleB: warm layout background, cool header, 1px container border with 4px radius.\n */\n dsStyle?: DSTableStyle;\n /**\n * Header background variant for styleB.\n * default: cool gray header\n * white: white header (allowed alternative in Figma docs)\n */\n dsHeaderVariant?: DSTableHeaderVariant;\n /**\n * DS responsive frozen-column mode.\n * none: no DS freezing behavior\n * first: freeze first column on small screens\n * last: freeze last column on small screens\n * both: freeze first and last columns on small screens\n */\n dsFrozenColumns?: DSTableFrozenColumns;\n /**\n * Breakpoint (px) at or below which DS frozen columns become active.\n */\n dsFrozenBreakpoint?: number;\n /**\n * Default width for DS-frozen columns when column width is not defined.\n */\n dsFrozenColumnWidth?: number;\n /**\n * Truncates cell text based on available cell width.\n */\n dsTruncateCellText?: boolean;\n /**\n * Shows DS tooltip with the full value when truncated text is hovered.\n */\n dsTruncateTooltip?: boolean;\n /**\n * Delay (seconds) before showing the truncation tooltip on hover.\n */\n dsTruncateTooltipDelay?: number;\n /**\n * DS tooltip size variant used for truncation tooltips.\n */\n dsTruncateTooltipSize?: DSTooltipSize;\n /**\n * DS tooltip title used for truncation tooltips when using normal tooltip size.\n */\n dsTruncateTooltipTitle?: string;\n /**\n * Column keys or dataIndex values that are editable when dsStyle is styleAEditable.\n */\n dsEditableColumns?: string[] | string | Record<string, boolean>;\n /**\n * Called whenever editable table data changes.\n */\n dsOnEditableDataChange?: (nextData: RecordType[]) => void;\n /**\n * When true, enables column visibility controls above the table for dsStyle=\"styleACustomizable\".\n */\n dsCustomizable?: boolean;\n /**\n * Column keys or dataIndex values that are currently visible.\n * Only used when dsStyle=\"styleACustomizable\".\n */\n dsVisibleColumns?: string[];\n /**\n * Called when user toggles column visibility.\n */\n dsOnVisibleColumnsChange?: (nextVisible: string[]) => void;\n};\n\nconst STYLE_ID = 'ds-table-styles';\n\nconst isTextValue = (value: unknown): value is string | number =>\n typeof value === 'string' || typeof value === 'number';\n\nconst DSTruncatedCell: React.FC<{\n value: string | number;\n withTooltip: boolean;\n tooltipDelay: number;\n tooltipSize: DSTooltipSize;\n tooltipTitle?: string;\n}> = ({ value, withTooltip, tooltipDelay, tooltipSize, tooltipTitle }) => {\n const cellRef = React.useRef<HTMLSpanElement>(null);\n const [isTruncated, setIsTruncated] = React.useState(false);\n const text = String(value);\n\n const updateTruncation = React.useCallback(() => {\n const cell = cellRef.current;\n if (!cell) return;\n const nextValue = cell.scrollWidth > cell.clientWidth;\n setIsTruncated((prev) => (prev === nextValue ? prev : nextValue));\n }, []);\n\n React.useEffect(() => {\n const cell = cellRef.current;\n if (!cell) return;\n\n updateTruncation();\n\n // Styles for truncation can be injected shortly after first render.\n // Re-check on subsequent frames so measurement reflects final layout.\n const rafId = requestAnimationFrame(() => {\n updateTruncation();\n requestAnimationFrame(updateTruncation);\n });\n const timeoutId = window.setTimeout(updateTruncation, 120);\n\n const resizeObserver = typeof ResizeObserver !== 'undefined' ? new ResizeObserver(updateTruncation) : null;\n if (resizeObserver) {\n resizeObserver.observe(cell);\n } else if (typeof window !== 'undefined') {\n window.addEventListener('resize', updateTruncation);\n }\n\n return () => {\n if (resizeObserver) {\n resizeObserver.disconnect();\n } else if (typeof window !== 'undefined') {\n window.removeEventListener('resize', updateTruncation);\n }\n cancelAnimationFrame(rafId);\n window.clearTimeout(timeoutId);\n };\n }, [text, updateTruncation]);\n\n const content = (\n <span\n ref={cellRef}\n className=\"ds-table-cell-truncate\"\n onMouseOverCapture={updateTruncation}\n onFocus={updateTruncation}\n >\n {text}\n </span>\n );\n\n if (!withTooltip) {\n return content;\n }\n\n return (\n <DSTooltip\n title={isTruncated ? undefined : null}\n dsSize={tooltipSize}\n dsTitle={tooltipTitle}\n dsBody={text}\n mouseEnterDelay={tooltipDelay}\n trigger=\"hover\"\n >\n {content}\n </DSTooltip>\n );\n};\n\nfunction withDSSortIcons(columns: any[] | undefined): any[] | undefined {\n if (!columns) return columns;\n\n return columns.map((column) => {\n const nextColumn = { ...column };\n\n if (Array.isArray(nextColumn.children) && nextColumn.children.length > 0) {\n nextColumn.children = withDSSortIcons(nextColumn.children);\n }\n\n if (nextColumn.sorter && !nextColumn.sortIcon) {\n nextColumn.sortIcon = ({ sortOrder }: { sortOrder?: 'ascend' | 'descend' }) => (\n <span className=\"ds-table-sort-icon\" aria-hidden=\"true\">\n <Icon\n name={sortOrder === 'ascend' ? 'arrowThickUp' : 'arrowThickDown'}\n size={10}\n style={{ color: 'inherit' }}\n />\n </span>\n );\n }\n\n return nextColumn;\n });\n}\n\nfunction withDSFrozenColumns(\n columns: any[] | undefined,\n mode: DSTableFrozenColumns,\n defaultFrozenWidth: number\n): any[] | undefined {\n if (!columns || mode === 'none' || columns.length === 0) return columns;\n\n const freezeFirst = mode === 'first' || mode === 'both';\n const freezeLast = mode === 'last' || mode === 'both';\n const lastIndex = columns.length - 1;\n\n return columns.map((column, index) => {\n const nextColumn = { ...column };\n\n const shouldFreezeLeft = freezeFirst && index === 0;\n const shouldFreezeRight = freezeLast && index === lastIndex;\n\n if (shouldFreezeLeft) {\n nextColumn.fixed = 'left';\n if (nextColumn.width == null) {\n nextColumn.width = defaultFrozenWidth;\n }\n }\n\n if (shouldFreezeRight) {\n nextColumn.fixed = 'right';\n if (nextColumn.width == null) {\n nextColumn.width = defaultFrozenWidth;\n }\n }\n\n return nextColumn;\n });\n}\n\nfunction withDSTruncatedCells(\n columns: any[] | undefined,\n withTooltip: boolean,\n tooltipDelay: number,\n tooltipSize: DSTooltipSize,\n tooltipTitle?: string\n): any[] | undefined {\n if (!columns) return columns;\n\n return columns.map((column) => {\n const nextColumn = { ...column };\n\n if (Array.isArray(nextColumn.children) && nextColumn.children.length > 0) {\n nextColumn.children = withDSTruncatedCells(nextColumn.children, withTooltip, tooltipDelay, tooltipSize, tooltipTitle);\n return nextColumn;\n }\n\n const originalRender = nextColumn.render;\n\n if (nextColumn.ellipsis == null) {\n nextColumn.ellipsis = { showTitle: false };\n } else if (nextColumn.ellipsis === true) {\n nextColumn.ellipsis = { showTitle: false };\n } else if (typeof nextColumn.ellipsis === 'object') {\n nextColumn.ellipsis = { ...nextColumn.ellipsis, showTitle: false };\n }\n\n nextColumn.render = (value: unknown, record: unknown, index: number) => {\n const rendered = originalRender ? originalRender(value, record, index) : value;\n\n if (isTextValue(rendered)) {\n return <DSTruncatedCell value={rendered} withTooltip={withTooltip} tooltipDelay={tooltipDelay} tooltipSize={tooltipSize} tooltipTitle={tooltipTitle} />;\n }\n\n if (!originalRender && isTextValue(value)) {\n return <DSTruncatedCell value={value} withTooltip={withTooltip} tooltipDelay={tooltipDelay} tooltipSize={tooltipSize} tooltipTitle={tooltipTitle} />;\n }\n\n return rendered;\n };\n\n return nextColumn;\n });\n}\n\nfunction getColumnIdentity(column: any): string | undefined {\n if (typeof column?.key === 'string') return column.key;\n if (typeof column?.dataIndex === 'string') return column.dataIndex;\n if (typeof column?.dataIndex === 'number') return String(column.dataIndex);\n return undefined;\n}\n\nfunction getValueByDataIndex(record: Record<string, unknown>, dataIndex: unknown): unknown {\n if (Array.isArray(dataIndex)) {\n return dataIndex.reduce<unknown>((acc, key) => {\n if (acc && typeof acc === 'object') {\n return (acc as Record<string, unknown>)[String(key)];\n }\n return undefined;\n }, record);\n }\n\n if (typeof dataIndex === 'string' || typeof dataIndex === 'number') {\n return record[String(dataIndex)];\n }\n\n return undefined;\n}\n\nfunction setValueByDataIndex(record: Record<string, unknown>, dataIndex: unknown, value: unknown): Record<string, unknown> {\n if (Array.isArray(dataIndex) && dataIndex.length > 0) {\n const next = { ...record };\n let cursor: Record<string, unknown> = next;\n\n for (let i = 0; i < dataIndex.length - 1; i += 1) {\n const key = String(dataIndex[i]);\n const current = cursor[key];\n const cloned = current && typeof current === 'object' ? { ...(current as Record<string, unknown>) } : {};\n cursor[key] = cloned;\n cursor = cloned;\n }\n\n cursor[String(dataIndex[dataIndex.length - 1])] = value;\n return next;\n }\n\n if (typeof dataIndex === 'string' || typeof dataIndex === 'number') {\n return { ...record, [String(dataIndex)]: value };\n }\n\n return record;\n}\n\nfunction withDSEditableCells(\n columns: any[] | undefined,\n editableColumnKeys: Set<string>,\n onValueChange: (rowIndex: number, dataIndex: unknown, nextValue: unknown) => void,\n): any[] | undefined {\n if (!columns) return columns;\n\n return columns.map((column) => {\n const nextColumn = { ...column };\n\n if (Array.isArray(nextColumn.children) && nextColumn.children.length > 0) {\n nextColumn.children = withDSEditableCells(nextColumn.children, editableColumnKeys, onValueChange);\n return nextColumn;\n }\n\n const identity = getColumnIdentity(nextColumn);\n const isEditable = Boolean(identity && editableColumnKeys.has(identity));\n\n if (!isEditable || nextColumn.dataIndex == null) {\n return nextColumn;\n }\n\n nextColumn.render = (_value: unknown, record: Record<string, unknown>, rowIndex: number) => {\n const currentValue = getValueByDataIndex(record, nextColumn.dataIndex);\n const isNumberValue = typeof currentValue === 'number';\n const inputValue = currentValue == null ? '' : String(currentValue);\n\n return (\n <Input\n className=\"ds-table-edit-input\"\n type={isNumberValue ? 'number' : 'text'}\n size=\"small\"\n value={inputValue}\n onChange={(event) => {\n const raw = event.target.value;\n const nextValue = isNumberValue ? (raw === '' ? null : Number(raw)) : raw;\n onValueChange(rowIndex, nextColumn.dataIndex, nextValue);\n }}\n />\n );\n };\n\n return nextColumn;\n });\n}\n\nfunction withDSVisibleColumnsFilter(\n columns: any[] | undefined,\n visibleColumnKeys: Set<string>,\n): any[] | undefined {\n if (!columns) return columns;\n\n return columns.map((column) => {\n const nextColumn = { ...column };\n\n if (Array.isArray(nextColumn.children) && nextColumn.children.length > 0) {\n nextColumn.children = withDSVisibleColumnsFilter(nextColumn.children, visibleColumnKeys);\n return nextColumn;\n }\n\n const identity = getColumnIdentity(nextColumn);\n if (!identity || visibleColumnKeys.has(identity)) {\n return nextColumn;\n }\n\n return null;\n }).filter((col) => col !== null);\n}\n\nconst DSColumnVisibilityControl: React.FC<{\n columns: any[];\n visibleColumns: Set<string>;\n onToggle: (colKey: string, visible: boolean) => void;\n}> = ({ columns, visibleColumns, onToggle }) => {\n const columnOptions = React.useMemo(() => {\n const opts: Array<{ key: string; label: string }> = [];\n\n const traverse = (cols: any[]) => {\n cols.forEach((col) => {\n if (Array.isArray(col.children) && col.children.length > 0) {\n traverse(col.children);\n } else {\n const identity = getColumnIdentity(col);\n const label = col.title || (typeof col.dataIndex === 'string' ? col.dataIndex : 'Column');\n if (identity) {\n opts.push({ key: identity, label: String(label) });\n }\n }\n });\n };\n\n traverse(columns);\n return opts;\n }, [columns]);\n\n return (\n <div className=\"ds-table-column-visibility-control\">\n <label className=\"ds-table-control-label\">Columns:</label>\n <div className=\"ds-table-control-checkboxes\">\n {columnOptions.map(({ key, label }) => (\n <label key={key} className=\"ds-table-control-checkbox\">\n <input\n type=\"checkbox\"\n checked={visibleColumns.has(key)}\n onChange={(e) => onToggle(key, e.target.checked)}\n />\n <span>{label}</span>\n </label>\n ))}\n </div>\n </div>\n );\n};\n\nfunction injectStyles() {\n if (typeof document === 'undefined') return;\n const { table, checkbox } = dsSemanticTokens;\n\n let style = document.getElementById(STYLE_ID) as HTMLStyleElement | null;\n if (!style) {\n style = document.createElement('style');\n style.id = STYLE_ID;\n document.head.appendChild(style);\n }\n\n style.textContent = `\n .ds-table {\n font-family: \"Nunito\", sans-serif;\n color: ${table.text.body};\n }\n\n .ds-table .ant-table {\n font-family: \"Nunito\", sans-serif;\n color: ${table.text.body};\n background: ${table.surface.container};\n }\n\n .ds-table .ant-table-thead > tr > th {\n color: ${table.text.header} !important;\n font-weight: ${table.typography.header.fontWeight} !important;\n font-size: ${table.typography.header.fontSize} !important;\n line-height: ${table.typography.header.lineHeight} !important;\n letter-spacing: ${table.typography.header.letterSpacing} !important;\n background: ${table.surface.container} !important;\n border-bottom: ${table.border.headerDividerWidth} solid ${table.border.container} !important;\n padding: ${table.padding.normal.header} !important;\n height: ${table.rowHeight.normal.header} !important;\n vertical-align: middle !important;\n box-sizing: border-box !important;\n }\n\n .ds-table .ant-table-thead > tr > th::before {\n display: none !important;\n }\n\n .ds-table .ant-table-tbody > tr > td {\n color: ${table.text.body} !important;\n font-weight: ${table.typography.body.fontWeight} !important;\n font-size: ${table.typography.body.fontSize} !important;\n line-height: ${table.typography.body.lineHeight} !important;\n letter-spacing: ${table.typography.body.letterSpacing} !important;\n border-bottom: 1px solid ${table.border.bodyDivider} !important;\n background: transparent !important;\n padding: ${table.padding.normal.body} !important;\n height: ${table.rowHeight.normal.body} !important;\n vertical-align: middle !important;\n transition: none !important;\n box-sizing: border-box !important;\n }\n\n .ds-table .ant-table-tbody > tr:hover > td {\n background: ${table.surface.rowHover} !important;\n }\n\n .ds-table .ant-table-tbody > tr.ant-table-row-selected > td,\n .ds-table .ant-table-tbody > tr.ant-table-row-selected:hover > td {\n background: ${table.surface.rowSelected} !important;\n }\n\n .ds-table .ant-table-selection-column .ant-checkbox.ant-checkbox-indeterminate {\n border-color: ${checkbox.border.checked} !important;\n background-color: ${checkbox.background.checked} !important;\n }\n\n .ds-table .ant-table-selection-column .ant-checkbox.ant-checkbox-indeterminate::after {\n content: '' !important;\n position: absolute !important;\n left: 50% !important;\n top: 50% !important;\n margin: 0 !important;\n border: 0 !important;\n border-radius: 1px !important;\n background: ${checkbox.mark.indeterminate} !important;\n width: ${checkbox.indeterminate.sm.width}px !important;\n height: ${checkbox.indeterminate.sm.height}px !important;\n transform: translate(-50%, -50%) !important;\n opacity: 1 !important;\n }\n\n .ds-table .ant-table-thead > tr > th.ant-table-column-sort,\n .ds-table .ant-table-thead > tr > th.ant-table-column-sort:hover {\n color: ${table.text.header} !important;\n }\n\n .ds-table .ant-table-thead > tr > th.ant-table-column-has-sorters,\n .ds-table .ant-table-thead > tr > th.ant-table-column-has-sorters:hover {\n color: ${table.text.header} !important;\n }\n\n .ds-table .ant-table-thead > tr > th.ant-table-column-has-sorters .ant-table-column-sorters {\n justify-content: flex-start !important;\n gap: 6px !important;\n }\n\n .ds-table .ant-table-thead > tr > th.ant-table-column-has-sorters .ant-table-column-title {\n flex: none !important;\n font-weight: 600 !important;\n }\n\n .ds-table .ant-table-thead > tr > th.ant-table-column-has-sorters .ant-table-column-sorter {\n opacity: 0 !important;\n transition: none !important;\n margin-inline-start: 0 !important;\n }\n\n .ds-table .ant-table-thead > tr > th.ant-table-column-has-sorters .ds-table-sort-icon {\n display: inline-flex !important;\n align-items: center !important;\n justify-content: center !important;\n width: 10px !important;\n height: 10px !important;\n opacity: 0 !important;\n transition: none !important;\n color: inherit !important;\n }\n\n .ds-table .ant-table-thead > tr > th.ant-table-column-has-sorters:hover .ant-table-column-sorter,\n .ds-table .ant-table-thead > tr > th.ant-table-column-sort .ant-table-column-sorter {\n opacity: 1 !important;\n }\n\n .ds-table .ant-table-thead > tr > th.ant-table-column-has-sorters:hover .ds-table-sort-icon,\n .ds-table .ant-table-thead > tr > th.ant-table-column-sort .ds-table-sort-icon {\n opacity: 1 !important;\n }\n\n .ds-table .ant-table-column-sorter,\n .ds-table .ant-table-column-sorter-up,\n .ds-table .ant-table-column-sorter-down {\n color: ${table.text.sorterMuted} !important;\n }\n\n .ds-table .ant-table-column-sorter-up.active,\n .ds-table .ant-table-column-sorter-down.active {\n color: ${table.text.header} !important;\n }\n\n .ds-table .ant-table-pagination.ant-pagination {\n margin-top: 16px !important;\n margin-bottom: 0 !important;\n }\n\n .ds-table .ant-table-row-expand-icon-cell {\n vertical-align: middle !important;\n }\n\n .ds-table .ant-table-row-expand-icon-cell .ds-table-expand-toggle {\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n margin: 0 auto !important;\n line-height: 0 !important;\n }\n\n .ds-table .ant-table-row-expand-icon-cell .ds-table-expand-toggle svg {\n display: block !important;\n width: 16px !important;\n height: 16px !important;\n }\n\n .ds-table .ds-table-cell-truncate {\n display: block !important;\n width: 100% !important;\n overflow: hidden !important;\n white-space: nowrap !important;\n text-overflow: ellipsis !important;\n }\n\n .ds-table.ds-table-size-small .ant-table-thead > tr > th,\n .ds-table.ds-table-size-small .ant-table-tbody > tr > td {\n vertical-align: middle !important;\n }\n\n .ds-table.ds-table-size-small .ant-table-thead > tr > th {\n font-size: ${table.typography.compactHeader.fontSize} !important;\n line-height: ${table.typography.compactHeader.lineHeight} !important;\n font-weight: ${table.typography.compactHeader.fontWeight} !important;\n letter-spacing: ${table.typography.compactHeader.letterSpacing} !important;\n height: ${table.rowHeight.compact.header} !important;\n padding: ${table.padding.compact.header} !important;\n border-bottom: ${table.border.headerDividerWidth} solid ${table.border.container} !important;\n }\n\n .ds-table.ds-table-size-small .ant-table-tbody > tr > td {\n font-size: ${table.typography.compactBody.fontSize} !important;\n line-height: ${table.typography.compactBody.lineHeight} !important;\n font-weight: ${table.typography.compactBody.fontWeight} !important;\n letter-spacing: ${table.typography.compactBody.letterSpacing} !important;\n height: ${table.rowHeight.compact.body} !important;\n min-height: ${table.rowHeight.compact.body} !important;\n max-height: ${table.rowHeight.compact.body} !important;\n padding: ${table.padding.compact.body} !important;\n }\n\n .ds-table.ds-table-size-small .ant-table-tbody > tr {\n height: ${table.rowHeight.compact.body} !important;\n min-height: ${table.rowHeight.compact.body} !important;\n max-height: ${table.rowHeight.compact.body} !important;\n }\n\n .ds-table.ds-table-size-small .ant-tag {\n margin-inline-end: 0 !important;\n padding: 0 4px !important;\n height: 16px !important;\n line-height: 16px !important;\n font-size: 10px !important;\n border-radius: 2px !important;\n display: inline-flex !important;\n align-items: center !important;\n }\n\n .ds-table.ds-table-size-middle .ant-table-thead > tr > th,\n .ds-table.ds-table-size-middle .ant-table-tbody > tr > td {\n padding: 0 16px !important;\n vertical-align: middle !important;\n }\n\n .ds-table.ds-table-size-middle .ant-table-thead > tr > th {\n font-size: ${table.typography.header.fontSize} !important;\n line-height: ${table.typography.header.lineHeight} !important;\n letter-spacing: ${table.typography.header.letterSpacing} !important;\n height: ${table.rowHeight.normal.header} !important;\n font-weight: ${table.typography.header.fontWeight} !important;\n }\n\n .ds-table.ds-table-size-middle .ant-table-tbody > tr > td {\n font-size: ${table.typography.body.fontSize} !important;\n line-height: ${table.typography.body.lineHeight} !important;\n letter-spacing: ${table.typography.body.letterSpacing} !important;\n height: ${table.rowHeight.normal.body} !important;\n }\n\n .ds-table.ds-table-size-large .ant-table-thead > tr > th,\n .ds-table.ds-table-size-large .ant-table-tbody > tr > td {\n padding: 0 16px !important;\n vertical-align: middle !important;\n }\n\n .ds-table.ds-table-size-large .ant-table-thead > tr > th {\n font-size: 18px !important;\n line-height: 22px !important;\n letter-spacing: -0.036px !important;\n height: 50px !important;\n font-weight: 600 !important;\n }\n\n .ds-table.ds-table-size-large .ant-table-tbody > tr > td {\n font-size: 16px !important;\n line-height: 20px !important;\n letter-spacing: -0.016px !important;\n height: 46px !important;\n }\n\n .ds-table.ds-table-styleA .ant-table {\n background: ${table.surface.container} !important;\n }\n\n .ds-table.ds-table-styleA .ant-table-thead > tr > th {\n border-bottom-width: 2px !important;\n }\n\n .ds-table.ds-table-styleA .ant-table-container {\n border: none !important;\n border-radius: 0 !important;\n background: ${table.surface.container} !important;\n }\n\n .ds-table.ds-table-styleAEditable .ant-table {\n background: ${table.surface.container} !important;\n }\n\n .ds-table.ds-table-styleAEditable .ant-table-thead > tr > th {\n border-bottom-width: 2px !important;\n }\n\n .ds-table.ds-table-styleAEditable .ant-table-container {\n border: none !important;\n border-radius: 0 !important;\n background: ${table.surface.container} !important;\n }\n\n .ds-table.ds-table-styleACustomizable .ant-table {\n background: ${table.surface.container} !important;\n }\n\n .ds-table.ds-table-styleACustomizable .ant-table-thead > tr > th {\n border-bottom-width: 2px !important;\n }\n\n .ds-table.ds-table-styleACustomizable .ant-table-container {\n border: none !important;\n border-radius: 0 !important;\n background: ${table.surface.container} !important;\n }\n\n .ds-table-column-visibility-control {\n display: flex !important;\n align-items: center !important;\n gap: 12px !important;\n margin-bottom: 16px !important;\n padding: 12px 0 !important;\n flex-wrap: wrap !important;\n }\n\n .ds-table-control-label {\n font-weight: 600 !important;\n font-size: 14px !important;\n color: ${table.text.body} !important;\n margin: 0 !important;\n }\n\n .ds-table-control-checkboxes {\n display: flex !important;\n gap: 12px !important;\n flex-wrap: wrap !important;\n }\n\n .ds-table-control-checkbox {\n display: inline-flex !important;\n align-items: center !important;\n gap: 6px !important;\n font-size: 14px !important;\n color: ${table.text.body} !important;\n cursor: pointer !important;\n user-select: none !important;\n margin: 0 !important;\n }\n\n .ds-table-control-checkbox input[type='checkbox'] {\n width: 16px !important;\n height: 16px !important;\n cursor: pointer !important;\n margin: 0 !important;\n }\n\n .ds-table .ds-table-edit-input.ant-input,\n .ds-table .ds-table-edit-input.ant-input-affix-wrapper {\n height: 26px !important;\n min-height: 26px !important;\n width: 100% !important;\n min-width: 0 !important;\n max-width: 100% !important;\n box-sizing: border-box !important;\n border-radius: 4px !important;\n border: 1px solid ${dsSemanticTokens.input.border.default} !important;\n background: ${dsSemanticTokens.input.background.default} !important;\n color: ${dsSemanticTokens.input.text.focus} !important;\n padding: 3px 8px !important;\n font-size: 12px !important;\n line-height: 16px !important;\n }\n\n .ds-table .ds-table-edit-input.ant-input:hover,\n .ds-table .ds-table-edit-input.ant-input-affix-wrapper:hover {\n border-color: ${dsSemanticTokens.input.border.hover} !important;\n }\n\n .ds-table .ds-table-edit-input.ant-input:focus,\n .ds-table .ds-table-edit-input.ant-input-focused,\n .ds-table .ds-table-edit-input.ant-input-affix-wrapper-focused {\n border-color: ${dsSemanticTokens.input.border.focus} !important;\n box-shadow: none !important;\n outline: none !important;\n }\n\n .ds-table.ds-table-styleB {\n background: ${table.surface.layout};\n padding: 0;\n }\n\n .ds-table.ds-table-styleB .ant-table {\n background: ${table.surface.layout} !important;\n }\n\n .ds-table.ds-table-styleB .ant-table-container {\n border: 1px solid ${table.border.container} !important;\n border-radius: ${table.border.radius} !important;\n overflow: hidden !important;\n background: ${table.surface.layout} !important;\n }\n\n .ds-table.ds-table-styleB .ant-table-thead > tr > th {\n border-bottom-width: ${table.border.headerDividerWidth} !important;\n background: ${table.surface.headerDefault} !important;\n }\n\n\n .ds-table.ds-table-styleB.ds-table-header-white .ant-table-thead > tr > th {\n background: ${table.surface.headerWhite} !important;\n }\n `;\n}\n\nexport const Table: React.FC<DSTableProps> = ({\n dsStyle = 'styleA',\n dsHeaderVariant = 'default',\n dsFrozenColumns = 'none',\n dsFrozenBreakpoint = 768,\n dsFrozenColumnWidth = 180,\n dsTruncateCellText = false,\n dsTruncateTooltip = true,\n dsTruncateTooltipDelay = 0.25,\n dsTruncateTooltipSize = 'normal',\n dsTruncateTooltipTitle = 'Title Heading',\n dsEditableColumns = [],\n dsOnEditableDataChange,\n dsCustomizable = false,\n dsVisibleColumns,\n dsOnVisibleColumnsChange,\n size = 'middle',\n className,\n columns,\n dataSource,\n ...antProps\n}) => {\n const [isAtOrBelowFrozenBreakpoint, setIsAtOrBelowFrozenBreakpoint] = React.useState(false);\n const [editableData, setEditableData] = React.useState<Record<string, unknown>[]>(\n Array.isArray(dataSource) ? (dataSource as Record<string, unknown>[]) : [],\n );\n const [localVisibleColumns, setLocalVisibleColumns] = React.useState<Set<string>>(() => {\n if (Array.isArray(dsVisibleColumns)) {\n return new Set(dsVisibleColumns.map(String));\n }\n if (columns && Array.isArray(columns)) {\n return new Set(\n columns\n .map((col) => getColumnIdentity(col))\n .filter((id) => Boolean(id)) as string[],\n );\n }\n return new Set();\n });\n\n useEffect(() => {\n injectStyles();\n }, []);\n\n useEffect(() => {\n if (typeof window === 'undefined') return;\n\n const onResize = () => {\n setIsAtOrBelowFrozenBreakpoint(window.innerWidth <= dsFrozenBreakpoint);\n };\n\n onResize();\n window.addEventListener('resize', onResize);\n\n return () => {\n window.removeEventListener('resize', onResize);\n };\n }, [dsFrozenBreakpoint]);\n\n useEffect(() => {\n if (dsStyle !== 'styleAEditable') return;\n setEditableData(Array.isArray(dataSource) ? (dataSource as Record<string, unknown>[]) : []);\n }, [dataSource, dsStyle]);\n\n const { scroll: antScroll, tableLayout: antTableLayout, ...restAntProps } = antProps;\n const useDSFrozenColumns = dsFrozenColumns !== 'none' && isAtOrBelowFrozenBreakpoint;\n const useEditableVariant = dsStyle === 'styleAEditable';\n const useCustomizableVariant = dsStyle === 'styleACustomizable' && dsCustomizable;\n\n useEffect(() => {\n if (!useCustomizableVariant) return;\n if (Array.isArray(dsVisibleColumns)) {\n setLocalVisibleColumns(new Set(dsVisibleColumns.map(String)));\n }\n }, [dsVisibleColumns, useCustomizableVariant]);\n\n const handleColumnVisibilityToggle = React.useCallback(\n (colKey: string, visible: boolean) => {\n setLocalVisibleColumns((prev) => {\n const next = new Set(prev);\n if (visible) {\n next.add(colKey);\n } else {\n next.delete(colKey);\n }\n const nextArray = Array.from(next);\n dsOnVisibleColumnsChange?.(nextArray);\n return next;\n });\n },\n [dsOnVisibleColumnsChange],\n );\n const normalizedEditableColumns = React.useMemo(() => {\n if (Array.isArray(dsEditableColumns)) {\n return dsEditableColumns.map(String);\n }\n\n if (typeof dsEditableColumns === 'string') {\n return dsEditableColumns\n .split(',')\n .map((entry) => entry.trim())\n .filter(Boolean);\n }\n\n if (dsEditableColumns && typeof dsEditableColumns === 'object') {\n return Object.entries(dsEditableColumns)\n .filter(([, enabled]) => Boolean(enabled))\n .map(([key]) => key);\n }\n\n return [] as string[];\n }, [dsEditableColumns]);\n\n const handleEditableCellChange = React.useCallback((rowIndex: number, dataIndex: unknown, nextValue: unknown) => {\n setEditableData((prev) => {\n if (!Array.isArray(prev) || !prev[rowIndex]) {\n return prev;\n }\n\n const nextRows = [...prev];\n const currentRow = nextRows[rowIndex] as Record<string, unknown>;\n nextRows[rowIndex] = setValueByDataIndex(currentRow, dataIndex, nextValue);\n dsOnEditableDataChange?.(nextRows as unknown[] as Record<string, unknown>[]);\n return nextRows;\n });\n }, [dsOnEditableDataChange]);\n\n const columnsWithDSBehavior = React.useMemo(() => {\n const withSortIcons = withDSSortIcons(columns as any[]);\n const withFrozenColumns = useDSFrozenColumns\n ? withDSFrozenColumns(withSortIcons, dsFrozenColumns, dsFrozenColumnWidth)\n : withSortIcons;\n\n const withVisibilityFilter = useCustomizableVariant\n ? withDSVisibleColumnsFilter(withFrozenColumns, localVisibleColumns)\n : withFrozenColumns;\n\n const editableColumnKeys = new Set(normalizedEditableColumns);\n const withEditableColumns = useEditableVariant\n ? withDSEditableCells(withVisibilityFilter, editableColumnKeys, handleEditableCellChange)\n : withVisibilityFilter;\n\n if (!dsTruncateCellText || useEditableVariant) {\n return withEditableColumns;\n }\n\n return withDSTruncatedCells(\n withEditableColumns,\n dsTruncateTooltip,\n dsTruncateTooltipDelay,\n dsTruncateTooltipSize,\n dsTruncateTooltipTitle\n );\n }, [\n columns,\n dsFrozenColumnWidth,\n dsFrozenColumns,\n dsTruncateCellText,\n dsTruncateTooltip,\n dsTruncateTooltipDelay,\n dsTruncateTooltipSize,\n dsTruncateTooltipTitle,\n normalizedEditableColumns,\n handleEditableCellChange,\n useDSFrozenColumns,\n useEditableVariant,\n localVisibleColumns,\n useCustomizableVariant,\n handleColumnVisibilityToggle,\n ]);\n\n const effectiveScroll = React.useMemo(() => {\n if (!useDSFrozenColumns) {\n return antScroll;\n }\n\n if (!antScroll || typeof antScroll !== 'object') {\n return { x: 'max-content' as const };\n }\n\n return {\n ...antScroll,\n x: antScroll.x ?? ('max-content' as const),\n };\n }, [antScroll, useDSFrozenColumns]);\n\n const effectiveTableLayout = useEditableVariant ? (antTableLayout ?? 'fixed') : antTableLayout;\n\n const dsClassName = [\n 'ds-table',\n `ds-table-${dsStyle}`,\n `ds-table-size-${size}`,\n dsHeaderVariant === 'white' ? 'ds-table-header-white' : '',\n className || '',\n ]\n .filter(Boolean)\n .join(' ');\n\n return useCustomizableVariant ? (\n <div className={dsClassName}>\n <DSColumnVisibilityControl\n columns={columns as any[]}\n visibleColumns={localVisibleColumns}\n onToggle={handleColumnVisibilityToggle}\n />\n <AntTable\n {...restAntProps}\n columns={columnsWithDSBehavior}\n dataSource={useEditableVariant ? editableData : dataSource}\n scroll={effectiveScroll}\n tableLayout={effectiveTableLayout}\n size={size}\n className={dsClassName}\n />\n </div>\n ) : (\n <AntTable\n {...restAntProps}\n columns={columnsWithDSBehavior}\n dataSource={useEditableVariant ? editableData : dataSource}\n scroll={effectiveScroll}\n tableLayout={effectiveTableLayout}\n size={size}\n className={dsClassName}\n />\n );\n};\n\nexport default Table;\n","import { Popover as AntPopover } from 'antd';\nimport type { PopoverProps as AntPopoverProps } from 'antd';\nimport { useEffect } from 'react';\nimport type { ReactNode } from 'react';\nimport { dsSemanticTokens } from '../../theme/ontadaTheme';\n\nexport type DSPopoverSize = 'mini' | 'normal';\n\nexport type PopoverProps = AntPopoverProps & {\n /** DS size variant from Figma. */\n dsSize?: DSPopoverSize;\n /** Optional DS title text for normal popover variant. */\n dsTitle?: string;\n /** DS body text used when Ant `content` prop is not provided. */\n dsBody?: string;\n};\n\nconst STYLE_ID = 'ds-popover-styles';\n\nfunction injectStyles() {\n if (typeof document === 'undefined') return;\n\n const { tooltip } = dsSemanticTokens;\n let style = document.getElementById(STYLE_ID) as HTMLStyleElement | null;\n if (!style) {\n style = document.createElement('style');\n style.id = STYLE_ID;\n document.head.appendChild(style);\n }\n\n style.textContent = `\n .ds-popover-overlay .ant-popover-inner {\n background: ${tooltip.surface.background};\n border-radius: ${tooltip.radius};\n box-shadow: none;\n filter: ${tooltip.elevation};\n color: ${tooltip.surface.body};\n letter-spacing: 0;\n max-width: ${tooltip.width.normal.max};\n min-width: ${tooltip.width.normal.min};\n padding: ${tooltip.padding.normal};\n }\n\n .ds-popover-overlay .ant-popover-arrow {\n width: ${tooltip.arrow.width};\n height: ${tooltip.arrow.height};\n }\n\n .ds-popover-overlay .ant-popover-arrow::before,\n .ds-popover-overlay .ant-popover-arrow::after {\n background: ${tooltip.surface.background};\n }\n\n .ds-popover-overlay.ds-popover-size-mini .ant-popover-inner {\n min-width: ${tooltip.width.mini.min};\n max-width: ${tooltip.width.mini.max};\n padding: ${tooltip.padding.mini};\n text-align: center;\n }\n\n .ds-popover-overlay .ant-popover-title,\n .ds-popover-title {\n margin: 0 0 4px;\n color: ${tooltip.surface.title};\n font-size: ${tooltip.typography.title.fontSize};\n font-weight: ${tooltip.typography.title.fontWeight};\n line-height: ${tooltip.typography.title.lineHeight};\n border: 0;\n padding: 0;\n min-height: 0;\n }\n\n .ds-popover-overlay .ant-popover-inner-content,\n .ds-popover-body {\n margin: 0;\n color: ${tooltip.surface.body};\n font-size: ${tooltip.typography.body.fontSize};\n font-weight: ${tooltip.typography.body.fontWeight};\n line-height: ${tooltip.typography.body.lineHeight};\n }\n\n .ds-popover-content {\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n\n .ds-popover-content-mini {\n align-items: center;\n }\n `;\n}\n\nfunction mergeClassNames(...names: Array<string | undefined>) {\n return names.filter(Boolean).join(' ');\n}\n\nfunction getDefaultContent(dsSize: DSPopoverSize, dsBody: string) {\n if (dsSize === 'mini') {\n return (\n <div className=\"ds-popover-content ds-popover-content-mini\">\n <p className=\"ds-popover-body\">{dsBody}</p>\n </div>\n );\n }\n\n return <p className=\"ds-popover-body\">{dsBody}</p>;\n}\n\nexport const Popover = ({\n dsSize = 'normal',\n dsTitle,\n dsBody,\n title,\n content,\n color,\n arrow,\n styles,\n classNames,\n overlayClassName,\n ...props\n}: PopoverProps) => {\n const { tooltip } = dsSemanticTokens;\n\n useEffect(() => {\n injectStyles();\n }, []);\n\n const defaultBody = dsSize === 'mini'\n ? 'Mini Popover'\n : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla pellentesque fermentum dolor eget.';\n\n const resolvedBody = dsBody ?? defaultBody;\n const resolvedContent: ReactNode =\n content !== undefined ? content : getDefaultContent(dsSize, resolvedBody);\n\n const resolvedTitle: ReactNode =\n title !== undefined\n ? title\n : dsSize === 'normal' && dsTitle\n ? <p className=\"ds-popover-title\">{dsTitle}</p>\n : undefined;\n\n const sizeBodyStyles = dsSize === 'mini'\n ? {\n minWidth: tooltip.width.mini.min,\n maxWidth: tooltip.width.mini.max,\n padding: tooltip.padding.mini,\n textAlign: 'center' as const,\n }\n : {\n minWidth: tooltip.width.normal.min,\n maxWidth: tooltip.width.normal.max,\n padding: tooltip.padding.normal,\n };\n\n return (\n <AntPopover\n {...props}\n title={resolvedTitle}\n content={resolvedContent}\n color={color ?? tooltip.surface.background}\n arrow={arrow ?? true}\n styles={{\n ...styles,\n body: {\n borderRadius: tooltip.radius,\n color: tooltip.surface.body,\n letterSpacing: 0,\n ...sizeBodyStyles,\n ...styles?.body,\n },\n }}\n classNames={{\n ...classNames,\n root: mergeClassNames('ds-popover-overlay', `ds-popover-size-${dsSize}`, classNames?.root, overlayClassName),\n }}\n />\n );\n};","import { Collapse as AntCollapse } from 'antd';\nimport type { CollapseProps } from 'antd';\nimport { useEffect, useMemo, useState } from 'react';\nimport { Icon } from '../../utils/icons';\nimport { dsSemanticTokens } from '../../theme/ontadaTheme';\n\ntype DSCollapseVariant = 'ant' | 'canonical';\nexport type DSCollapseSize = 'sm' | 'md' | 'lg';\nexport type DSCollapsePanelBackground = 'white' | 'light-gray' | 'collapsed-all';\nexport type DSCollapseHeaderBackground = 'panel' | 'light-gray';\n\ntype CollapseChangeKey = NonNullable<CollapseProps['onChange']> extends (key: infer K) => void ? K : string | number | Array<string | number>;\n\ntype ActiveKey = CollapseProps['activeKey'];\n\ntype ExpandIconPanelProps = {\n isActive?: boolean;\n};\n\ntype RestrictedAntProps = 'expandIcon';\n\nconst PANEL_ICON_SIZE_BY_DS_SIZE: Record<DSCollapseSize, number> = {\n lg: 16,\n md: 12,\n sm: 10,\n};\n\nexport type DSCollapseProps = Omit<CollapseProps, RestrictedAntProps> & {\n /** Render Ant defaults or DS canonical accordion styling. */\n dsVariant?: DSCollapseVariant;\n /** Canonical DS size from Figma: sm, md, lg. */\n dsSize?: DSCollapseSize;\n /** Shows Expand all / Collapse all controls for canonical variants. */\n dsShowBulkActions?: boolean;\n /** Label text for bulk expand action. */\n dsExpandAllLabel?: string;\n /** Label text for bulk collapse action. */\n dsCollapseAllLabel?: string;\n /** Canonical panel background variant from Figma component accordion. */\n dsPanelBackground?: DSCollapsePanelBackground;\n /** Header background fill for canonical variants. */\n dsHeaderBackground?: DSCollapseHeaderBackground;\n /** Optional row gap (px) between accordion items for Figma parity variants. */\n dsRowGap?: number;\n /** Adds left/right contrasting edges for open panel body variants from Figma. */\n dsOpenPanelEdgeContrast?: boolean;\n};\n\nconst STYLE_ID = 'ds-collapse-styles-v2';\nconst DS_COLLAPSE_CLASS = 'ds-collapse';\n\nfunction injectStyles() {\n if (typeof document === 'undefined') return;\n\n const { table, input, button } = dsSemanticTokens;\n const existingStyle = document.getElementById(STYLE_ID) as HTMLStyleElement | null;\n\n const cssText = `\n .${DS_COLLAPSE_CLASS}.ant-collapse {\n background: ${table.surface.container};\n border: none;\n border-radius: 0;\n }\n\n .${DS_COLLAPSE_CLASS}.ant-collapse > .ant-collapse-item {\n background: var(--ds-collapse-content-bg, ${table.surface.container});\n border-bottom: 1px solid ${table.border.bodyDivider};\n }\n\n .${DS_COLLAPSE_CLASS}.ant-collapse > .ant-collapse-item:first-child {\n border-top: 1px solid ${table.border.bodyDivider};\n }\n\n .${DS_COLLAPSE_CLASS}.ant-collapse > .ant-collapse-item > .ant-collapse-header {\n position: relative;\n align-items: center;\n color: ${button.primary.default};\n font-family: 'Nunito', sans-serif;\n font-weight: 600;\n background: var(--ds-collapse-header-bg, var(--ds-collapse-panel-bg, ${table.surface.container}));\n }\n\n .${DS_COLLAPSE_CLASS}.ant-collapse:not([data-ds-panel-background='collapsed-all']) > .ant-collapse-item.ant-collapse-item-active > .ant-collapse-header {\n border-bottom: 1px solid ${table.border.bodyDivider};\n }\n\n .${DS_COLLAPSE_CLASS}.ant-collapse > .ant-collapse-item > .ant-collapse-content,\n .${DS_COLLAPSE_CLASS}.ant-collapse > .ant-collapse-item > .ant-collapse-panel {\n border-top: none;\n background: var(--ds-collapse-content-bg, ${table.surface.container});\n }\n\n .${DS_COLLAPSE_CLASS}.ant-collapse > .ant-collapse-item > .ant-collapse-content > .ant-collapse-content-box,\n .${DS_COLLAPSE_CLASS}.ant-collapse > .ant-collapse-item > .ant-collapse-panel > .ant-collapse-body {\n color: ${table.text.body};\n font-family: 'Nunito', sans-serif;\n font-weight: 400;\n }\n\n .${DS_COLLAPSE_CLASS}[data-ds-size='lg'] > .ant-collapse-item > .ant-collapse-header {\n min-height: 60px;\n padding: 19px 40px !important;\n }\n\n .${DS_COLLAPSE_CLASS}[data-ds-size='lg'] .ant-collapse-header,\n .${DS_COLLAPSE_CLASS}[data-ds-size='lg'] .ant-collapse-header .ant-collapse-header-text,\n .${DS_COLLAPSE_CLASS}[data-ds-size='lg'] .ant-collapse-header .ant-collapse-title {\n font-size: 18px;\n line-height: 22px;\n letter-spacing: -0.036px;\n font-weight: 600;\n }\n\n .${DS_COLLAPSE_CLASS}[data-ds-size='lg'] > .ant-collapse-item > .ant-collapse-header .ant-collapse-expand-icon {\n margin-inline-end: 24px;\n }\n\n .${DS_COLLAPSE_CLASS}[data-ds-size='lg'] > .ant-collapse-item > .ant-collapse-content > .ant-collapse-content-box,\n .${DS_COLLAPSE_CLASS}[data-ds-size='lg'] > .ant-collapse-item > .ant-collapse-panel > .ant-collapse-body {\n padding: 24px 40px !important;\n font-size: 16px;\n line-height: 20px;\n letter-spacing: -0.016px;\n font-weight: 400;\n }\n\n .${DS_COLLAPSE_CLASS}[data-ds-size='lg'] .ant-collapse-content-box,\n .${DS_COLLAPSE_CLASS}[data-ds-size='lg'] .ant-collapse-body,\n .${DS_COLLAPSE_CLASS}[data-ds-size='lg'] .ant-collapse-content-box p,\n .${DS_COLLAPSE_CLASS}[data-ds-size='lg'] .ant-collapse-body p,\n .${DS_COLLAPSE_CLASS}[data-ds-size='lg'] .ant-collapse-content-box span {\n font-size: 16px;\n line-height: 20px;\n letter-spacing: -0.016px;\n font-weight: 400;\n }\n\n .${DS_COLLAPSE_CLASS}[data-ds-size='md'] > .ant-collapse-item > .ant-collapse-header {\n min-height: 50px;\n padding: 15px 40px !important;\n }\n\n .${DS_COLLAPSE_CLASS}[data-ds-size='md'] .ant-collapse-header,\n .${DS_COLLAPSE_CLASS}[data-ds-size='md'] .ant-collapse-header .ant-collapse-header-text,\n .${DS_COLLAPSE_CLASS}[data-ds-size='md'] .ant-collapse-header .ant-collapse-title {\n font-size: 16px;\n line-height: 20px;\n letter-spacing: -0.016px;\n font-weight: 600;\n }\n\n .${DS_COLLAPSE_CLASS}[data-ds-size='md'] > .ant-collapse-item > .ant-collapse-header .ant-collapse-expand-icon {\n margin-inline-end: 16px;\n }\n\n .${DS_COLLAPSE_CLASS}[data-ds-size='md'] > .ant-collapse-item > .ant-collapse-content > .ant-collapse-content-box,\n .${DS_COLLAPSE_CLASS}[data-ds-size='md'] > .ant-collapse-item > .ant-collapse-panel > .ant-collapse-body {\n padding: 24px 40px !important;\n font-size: 16px;\n line-height: 20px;\n letter-spacing: -0.016px;\n font-weight: 400;\n }\n\n .${DS_COLLAPSE_CLASS}[data-ds-size='md'] .ant-collapse-content-box,\n .${DS_COLLAPSE_CLASS}[data-ds-size='md'] .ant-collapse-body,\n .${DS_COLLAPSE_CLASS}[data-ds-size='md'] .ant-collapse-content-box p,\n .${DS_COLLAPSE_CLASS}[data-ds-size='md'] .ant-collapse-body p,\n .${DS_COLLAPSE_CLASS}[data-ds-size='md'] .ant-collapse-content-box span {\n font-size: 16px;\n line-height: 20px;\n letter-spacing: -0.016px;\n font-weight: 400;\n }\n\n .${DS_COLLAPSE_CLASS}[data-ds-size='sm'] > .ant-collapse-item > .ant-collapse-header {\n min-height: 32px;\n padding: 7px 24px !important;\n }\n\n .${DS_COLLAPSE_CLASS}[data-ds-size='sm'] .ant-collapse-header,\n .${DS_COLLAPSE_CLASS}[data-ds-size='sm'] .ant-collapse-header .ant-collapse-header-text,\n .${DS_COLLAPSE_CLASS}[data-ds-size='sm'] .ant-collapse-header .ant-collapse-title {\n font-size: 14px;\n line-height: 18px;\n letter-spacing: 0;\n font-weight: 600;\n }\n\n .${DS_COLLAPSE_CLASS}[data-ds-size='sm'] > .ant-collapse-item > .ant-collapse-header .ant-collapse-expand-icon {\n margin-inline-end: 12px;\n }\n\n .${DS_COLLAPSE_CLASS}[data-ds-size='sm'] > .ant-collapse-item > .ant-collapse-content > .ant-collapse-content-box,\n .${DS_COLLAPSE_CLASS}[data-ds-size='sm'] > .ant-collapse-item > .ant-collapse-panel > .ant-collapse-body {\n padding: 24px !important;\n font-size: 14px;\n line-height: 18px;\n letter-spacing: 0;\n font-weight: 400;\n }\n\n .${DS_COLLAPSE_CLASS}[data-ds-size='sm'] .ant-collapse-content-box,\n .${DS_COLLAPSE_CLASS}[data-ds-size='sm'] .ant-collapse-body,\n .${DS_COLLAPSE_CLASS}[data-ds-size='sm'] .ant-collapse-content-box p,\n .${DS_COLLAPSE_CLASS}[data-ds-size='sm'] .ant-collapse-body p,\n .${DS_COLLAPSE_CLASS}[data-ds-size='sm'] .ant-collapse-content-box span {\n font-size: 14px;\n line-height: 18px;\n letter-spacing: 0;\n font-weight: 400;\n }\n\n .${DS_COLLAPSE_CLASS}-controls {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: 24px;\n margin-bottom: 12px;\n color: ${input.text.placeholder};\n font-family: 'Nunito', sans-serif;\n font-weight: 600;\n background: ${table.surface.container};\n user-select: none;\n }\n\n .${DS_COLLAPSE_CLASS}-controls[data-ds-size='sm'] {\n font-size: 12px;\n line-height: 16px;\n letter-spacing: 0.012px;\n }\n\n .${DS_COLLAPSE_CLASS}-controls[data-ds-size='md'],\n .${DS_COLLAPSE_CLASS}-controls[data-ds-size='lg'] {\n font-size: 14px;\n line-height: 18px;\n letter-spacing: 0;\n }\n\n .${DS_COLLAPSE_CLASS}-controls[data-ds-size='sm'] .${DS_COLLAPSE_CLASS}-control-button {\n font-size: 12px;\n line-height: 16px;\n letter-spacing: 0.012px;\n font-weight: 600;\n }\n\n .${DS_COLLAPSE_CLASS}-controls[data-ds-size='md'] .${DS_COLLAPSE_CLASS}-control-button,\n .${DS_COLLAPSE_CLASS}-controls[data-ds-size='lg'] .${DS_COLLAPSE_CLASS}-control-button {\n font-size: 14px;\n line-height: 18px;\n letter-spacing: 0;\n font-weight: 600;\n }\n\n .${DS_COLLAPSE_CLASS}-control-button {\n border: 0;\n background: transparent;\n color: inherit;\n cursor: pointer;\n padding: 0;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font: inherit;\n }\n\n .${DS_COLLAPSE_CLASS}-control-button:disabled {\n opacity: 0.45;\n cursor: not-allowed;\n }\n\n .${DS_COLLAPSE_CLASS}-control-icon {\n width: 16px;\n height: 16px;\n border-radius: 999px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n line-height: 1;\n }\n\n .${DS_COLLAPSE_CLASS}-control-icon > svg,\n .${DS_COLLAPSE_CLASS}-control-icon .anticon,\n .${DS_COLLAPSE_CLASS}-control-icon span > svg {\n width: 16px !important;\n height: 16px !important;\n min-width: 16px !important;\n min-height: 16px !important;\n display: block;\n }\n\n .${DS_COLLAPSE_CLASS}-chevron {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--ds-collapse-panel-icon-size);\n height: var(--ds-collapse-panel-icon-size);\n min-width: var(--ds-collapse-panel-icon-size);\n min-height: var(--ds-collapse-panel-icon-size);\n color: ${input.text.disabled};\n line-height: 1;\n }\n\n .${DS_COLLAPSE_CLASS}.ant-collapse .ant-collapse-expand-icon {\n width: var(--ds-collapse-panel-icon-size) !important;\n height: var(--ds-collapse-panel-icon-size) !important;\n min-width: var(--ds-collapse-panel-icon-size) !important;\n min-height: var(--ds-collapse-panel-icon-size) !important;\n flex: 0 0 var(--ds-collapse-panel-icon-size) !important;\n padding-inline-start: 0 !important;\n padding-inline-end: 0 !important;\n margin-inline-start: 0 !important;\n display: inline-flex !important;\n align-items: center !important;\n justify-content: center !important;\n }\n\n .${DS_COLLAPSE_CLASS}.ant-collapse .ant-collapse-arrow {\n width: var(--ds-collapse-panel-icon-size) !important;\n height: var(--ds-collapse-panel-icon-size) !important;\n min-width: var(--ds-collapse-panel-icon-size) !important;\n min-height: var(--ds-collapse-panel-icon-size) !important;\n font-size: var(--ds-collapse-panel-icon-size) !important;\n display: inline-flex !important;\n align-items: center !important;\n justify-content: center !important;\n line-height: 1 !important;\n }\n\n .${DS_COLLAPSE_CLASS}.ant-collapse .ant-collapse-arrow svg {\n width: var(--ds-collapse-panel-icon-size) !important;\n height: var(--ds-collapse-panel-icon-size) !important;\n min-width: var(--ds-collapse-panel-icon-size) !important;\n min-height: var(--ds-collapse-panel-icon-size) !important;\n display: block !important;\n }\n\n .${DS_COLLAPSE_CLASS}.ant-collapse[data-ds-row-gap='true'] {\n display: flex;\n flex-direction: column;\n gap: var(--ds-collapse-row-gap, 0px);\n background: transparent;\n }\n\n .${DS_COLLAPSE_CLASS}.ant-collapse[data-ds-row-gap='true'] > .ant-collapse-item {\n background: var(--ds-collapse-content-bg, ${table.surface.container});\n border: 1px solid ${table.border.bodyDivider};\n border-radius: 0;\n overflow: hidden;\n }\n\n .${DS_COLLAPSE_CLASS}.ant-collapse[data-ds-row-gap='true'] > .ant-collapse-item:first-child {\n border-top-left-radius: 8px;\n border-top-right-radius: 8px;\n border-top: 1px solid ${table.border.bodyDivider};\n }\n\n .${DS_COLLAPSE_CLASS}.ant-collapse[data-ds-row-gap='true'] > .ant-collapse-item:last-child {\n border-bottom-left-radius: 8px;\n border-bottom-right-radius: 8px;\n }\n\n .${DS_COLLAPSE_CLASS}.ant-collapse[data-ds-panel-background='collapsed-all'] {\n background: transparent;\n display: flex;\n flex-direction: column;\n gap: var(--ds-collapse-row-gap, 16px);\n }\n\n .${DS_COLLAPSE_CLASS}.ant-collapse[data-ds-panel-background='collapsed-all'] > .ant-collapse-item {\n border: none;\n border-radius: 0;\n }\n\n .${DS_COLLAPSE_CLASS}.ant-collapse[data-ds-panel-background='collapsed-all'] > .ant-collapse-item > .ant-collapse-header {\n border-radius: 0;\n border: 1px solid ${table.border.bodyDivider};\n }\n\n .${DS_COLLAPSE_CLASS}.ant-collapse[data-ds-panel-background='collapsed-all'] > .ant-collapse-item:first-child > .ant-collapse-header {\n border-top-left-radius: 8px;\n border-top-right-radius: 8px;\n }\n\n .${DS_COLLAPSE_CLASS}.ant-collapse[data-ds-panel-background='collapsed-all'] > .ant-collapse-item:last-child > .ant-collapse-header {\n border-bottom-left-radius: 8px;\n border-bottom-right-radius: 8px;\n }\n\n .${DS_COLLAPSE_CLASS}.ant-collapse[data-ds-panel-background='collapsed-all'] > .ant-collapse-item > .ant-collapse-content,\n .${DS_COLLAPSE_CLASS}.ant-collapse[data-ds-panel-background='collapsed-all'] > .ant-collapse-item > .ant-collapse-panel {\n border-radius: 0;\n margin-top: -1px;\n border: 1px solid ${table.border.bodyDivider};\n border-top: none;\n }\n\n .${DS_COLLAPSE_CLASS}.ant-collapse[data-ds-open-panel-edge-contrast='true'] > .ant-collapse-item.ant-collapse-item-active {\n border-left-color: ${table.border.container};\n border-right-color: ${table.border.container};\n }\n `;\n\n if (existingStyle) {\n existingStyle.textContent = cssText;\n return;\n }\n\n const style = document.createElement('style');\n style.id = STYLE_ID;\n style.textContent = cssText;\n document.head.appendChild(style);\n}\n\nfunction toKeyArray(activeKey: ActiveKey | undefined): Array<string | number> {\n if (activeKey == null) return [];\n if (Array.isArray(activeKey)) return activeKey;\n return [activeKey];\n}\n\nexport const Collapse = ({\n dsVariant = 'ant',\n dsSize = 'md',\n dsShowBulkActions = false,\n dsExpandAllLabel = 'Expand all',\n dsCollapseAllLabel = 'Collapse all',\n dsPanelBackground = 'white',\n dsHeaderBackground = 'panel',\n dsRowGap,\n dsOpenPanelEdgeContrast = false,\n className,\n activeKey,\n defaultActiveKey,\n items,\n onChange,\n bordered,\n ...props\n}: DSCollapseProps) => {\n useEffect(() => {\n injectStyles();\n }, []);\n\n const isCanonical = dsVariant === 'canonical';\n const panelIconSize = PANEL_ICON_SIZE_BY_DS_SIZE[dsSize];\n const tableTokens = dsSemanticTokens.table;\n const panelBackground =\n dsPanelBackground === 'light-gray' || dsPanelBackground === 'collapsed-all'\n ? tableTokens.surface.rowHover\n : tableTokens.surface.container;\n const headerBackground =\n dsHeaderBackground === 'light-gray'\n ? tableTokens.surface.rowHover\n : panelBackground;\n const rowGap = dsRowGap ?? 0;\n const isControlled = activeKey !== undefined;\n const [internalActiveKey, setInternalActiveKey] = useState<ActiveKey>(defaultActiveKey);\n\n const resolvedActiveKey = isControlled ? activeKey : internalActiveKey;\n const allKeys = useMemo(() => (items ?? []).map((item) => item.key), [items]);\n const activeKeysArray = toKeyArray(resolvedActiveKey);\n\n const handleChange = (nextKey: CollapseChangeKey) => {\n if (!isControlled) {\n setInternalActiveKey(nextKey as ActiveKey);\n }\n onChange?.(nextKey);\n };\n\n const handleExpandAll = () => {\n if (allKeys.length === 0) return;\n handleChange(allKeys as CollapseChangeKey);\n };\n\n const handleCollapseAll = () => {\n handleChange([] as CollapseChangeKey);\n };\n\n const resolvedBordered = isCanonical ? (bordered ?? false) : bordered;\n const mergedClassName = [isCanonical ? DS_COLLAPSE_CLASS : undefined, className].filter(Boolean).join(' ');\n\n const resolvedExpandIcon = isCanonical\n ? ({ isActive }: ExpandIconPanelProps) => (\n <span className={`${DS_COLLAPSE_CLASS}-chevron`}>\n <Icon\n name={isActive ? 'arrowDown1' : 'arrowRight1'}\n size={panelIconSize}\n style={{\n width: `${panelIconSize}px`,\n height: `${panelIconSize}px`,\n minWidth: `${panelIconSize}px`,\n minHeight: `${panelIconSize}px`,\n display: 'block',\n }}\n />\n </span>\n )\n : undefined;\n\n const resolvedStyle = isCanonical\n ? {\n ...props.style,\n ['--ds-collapse-panel-icon-size' as string]: `${panelIconSize}px`,\n ['--ds-collapse-panel-bg' as string]: panelBackground,\n ['--ds-collapse-content-bg' as string]: tableTokens.surface.container,\n ['--ds-collapse-header-bg' as string]: headerBackground,\n ['--ds-collapse-row-gap' as string]: `${rowGap}px`,\n }\n : props.style;\n\n return (\n <div>\n {isCanonical && dsShowBulkActions && (\n <div className={`${DS_COLLAPSE_CLASS}-controls`} data-ds-size={dsSize}>\n <button\n type=\"button\"\n className={`${DS_COLLAPSE_CLASS}-control-button`}\n onClick={handleExpandAll}\n disabled={allKeys.length > 0 && activeKeysArray.length === allKeys.length}\n >\n <span className={`${DS_COLLAPSE_CLASS}-control-icon`} aria-hidden=\"true\">\n <Icon name=\"addCircle1\" size={16} />\n </span>\n {dsExpandAllLabel}\n </button>\n\n <button\n type=\"button\"\n className={`${DS_COLLAPSE_CLASS}-control-button`}\n onClick={handleCollapseAll}\n disabled={activeKeysArray.length === 0}\n >\n <span className={`${DS_COLLAPSE_CLASS}-control-icon`} aria-hidden=\"true\">\n <Icon name=\"subtractCircle1\" size={16} />\n </span>\n {dsCollapseAllLabel}\n </button>\n </div>\n )}\n\n <AntCollapse\n {...props}\n items={items}\n bordered={resolvedBordered}\n expandIcon={resolvedExpandIcon}\n activeKey={resolvedActiveKey}\n onChange={handleChange}\n className={mergedClassName}\n style={resolvedStyle}\n data-ds-size={isCanonical ? dsSize : undefined}\n data-ds-panel-background={isCanonical ? dsPanelBackground : undefined}\n data-ds-row-gap={isCanonical && rowGap > 0 ? 'true' : undefined}\n data-ds-open-panel-edge-contrast={isCanonical && dsOpenPanelEdgeContrast ? 'true' : undefined}\n />\n </div>\n );\n};\n\nCollapse.displayName = 'Collapse';\n","import type { SegmentedProps as AntSegmentedProps } from 'antd';\nimport { useEffect, useMemo, useState } from 'react';\nimport type { CSSProperties, ReactNode } from 'react';\nimport { dsSemanticTokens } from '../../theme/ontadaTheme';\n\nexport type DSSegmentedSize = 'sm' | 'md' | 'lg';\n\nexport type SegmentedProps = AntSegmentedProps & {\n /** DS size mapped from Figma segmented variants. */\n dsSize?: DSSegmentedSize;\n};\n\nconst STYLE_ID = 'ds-segmented-styles';\n\nconst DS_TO_ANT_SIZE: Record<DSSegmentedSize, 'small' | 'middle' | 'large'> = {\n sm: 'small',\n md: 'middle',\n lg: 'large',\n};\n\ntype SegmentValue = string | number;\n\ntype DSOption = {\n label?: ReactNode;\n value: SegmentValue;\n icon?: ReactNode;\n disabled?: boolean;\n title?: string;\n};\n\nfunction mapAntSizeToDS(size: AntSegmentedProps['size']): DSSegmentedSize {\n if (size === 'small') return 'sm';\n if (size === 'large') return 'lg';\n return 'md';\n}\n\nfunction normalizeOptions(options: AntSegmentedProps['options']): DSOption[] {\n if (!options || options.length === 0) return [];\n\n return options.map((option) => {\n if (typeof option === 'string' || typeof option === 'number') {\n return {\n value: option,\n label: option,\n };\n }\n\n return {\n value: option.value as SegmentValue,\n label: option.label ?? option.value,\n icon: (option as { icon?: ReactNode }).icon,\n disabled: option.disabled,\n title: option.title,\n };\n });\n}\n\nfunction injectStyles() {\n if (typeof document === 'undefined') return;\n if (document.getElementById(STYLE_ID)) return;\n\n const { segmented } = dsSemanticTokens;\n\n const style = document.createElement('style');\n style.id = STYLE_ID;\n style.textContent = `\n [data-ds-segmented] {\n box-sizing: border-box;\n height: var(--ds-segmented-control-height);\n width: var(--ds-segmented-width, auto);\n font-family: var(--ant-font-family, 'Nunito', sans-serif);\n background: ${segmented.container.background};\n border: ${segmented.container.borderWidth} solid ${segmented.container.border};\n border-radius: ${segmented.container.radius};\n padding: ${segmented.container.padding};\n box-shadow: none;\n display: inline-flex;\n }\n\n [data-ds-segmented][data-ds-block='true'] {\n width: 100%;\n display: flex;\n }\n\n [data-ds-segmented] .ds-segmented-group {\n gap: 0;\n height: var(--ds-segmented-item-height);\n display: flex;\n align-items: stretch;\n width: 100%;\n }\n\n [data-ds-segmented] .ds-segmented-item {\n box-sizing: border-box;\n display: flex;\n align-items: stretch;\n flex: 1 1 0;\n height: var(--ds-segmented-item-height);\n min-height: 0;\n margin: 0;\n border: 1px solid transparent;\n border-radius: ${segmented.item.unselectedRadius};\n line-height: normal;\n transition: none;\n background: transparent;\n color: ${segmented.text.inactive};\n font-family: inherit;\n font-size: inherit;\n cursor: pointer;\n padding: 0;\n outline: none;\n appearance: none;\n }\n\n [data-ds-segmented] .ds-segmented-item[aria-checked='true'] {\n background: ${segmented.item.selectedBackground};\n border-color: ${segmented.item.selectedBorder};\n border-radius: ${segmented.item.selectedRadius};\n color: ${segmented.text.active};\n }\n\n [data-ds-segmented] .ds-segmented-item[aria-disabled='true'] {\n opacity: 0.55;\n cursor: not-allowed;\n }\n\n [data-ds-segmented] .ds-segmented-item-label {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--ds-segmented-item-gap);\n min-height: 0 !important;\n height: 100% !important;\n width: 100%;\n padding: 0 var(--ds-segmented-item-padding-x);\n color: inherit;\n font-size: var(--ds-segmented-font-size);\n line-height: var(--ds-segmented-line-height) !important;\n font-weight: ${segmented.typography.fontWeight};\n letter-spacing: var(--ds-segmented-letter-spacing);\n text-align: center;\n box-sizing: border-box;\n white-space: nowrap;\n }\n\n [data-ds-segmented] .ds-segmented-item-icon {\n width: var(--ds-segmented-icon-size);\n height: var(--ds-segmented-icon-size);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n color: inherit;\n font-size: var(--ds-segmented-icon-size);\n line-height: 1;\n flex: 0 0 auto;\n }\n\n [data-ds-segmented] .ds-segmented-item-icon svg {\n width: var(--ds-segmented-icon-size);\n height: var(--ds-segmented-icon-size);\n display: block;\n }\n\n [data-ds-segmented] .ds-segmented-item,\n [data-ds-segmented] .ds-segmented-item-label,\n [data-ds-segmented] .ds-segmented-item-icon {\n transition: none !important;\n animation: none !important;\n }\n\n `;\n\n document.head.appendChild(style);\n}\n\nexport const Segmented = ({ dsSize = 'md', size, style, ...props }: SegmentedProps) => {\n useEffect(() => {\n injectStyles();\n }, []);\n\n const {\n options,\n value,\n defaultValue,\n onChange,\n disabled,\n block,\n className,\n name,\n id,\n ...restProps\n } = props;\n\n const resolvedSize = dsSize ?? mapAntSizeToDS(size);\n const normalizedOptions = useMemo(() => normalizeOptions(options), [options]);\n\n const firstOption = normalizedOptions[0];\n const [uncontrolledValue, setUncontrolledValue] = useState<SegmentValue | undefined>(\n (defaultValue as SegmentValue | undefined) ?? firstOption?.value,\n );\n\n const selectedValue = (value as SegmentValue | undefined) ?? uncontrolledValue;\n\n const tokens = dsSemanticTokens.segmented.size[resolvedSize];\n\n const handleSelect = (option: DSOption) => {\n if (disabled || option.disabled) return;\n\n if (value === undefined) {\n setUncontrolledValue(option.value);\n }\n\n onChange?.(option.value);\n };\n\n const rootStyle: CSSProperties = {\n ...style,\n ['--ds-segmented-item-height' as string]: tokens.itemHeight,\n ['--ds-segmented-control-height' as string]: tokens.controlHeight,\n ['--ds-segmented-item-gap' as string]: tokens.gap,\n ['--ds-segmented-item-padding-x' as string]: tokens.paddingX,\n ['--ds-segmented-font-size' as string]: tokens.fontSize,\n ['--ds-segmented-line-height' as string]: tokens.lineHeight,\n ['--ds-segmented-letter-spacing' as string]: tokens.letterSpacing,\n ['--ds-segmented-icon-size' as string]: tokens.iconSize,\n };\n\n if (block) {\n rootStyle['--ds-segmented-width' as string] = '100%';\n }\n\n return (\n <div\n {...restProps}\n id={id}\n className={className}\n role=\"radiogroup\"\n aria-disabled={disabled ? 'true' : 'false'}\n data-ds-block={block ? 'true' : 'false'}\n style={rootStyle}\n data-ds-segmented\n data-ds-size={resolvedSize}\n data-ds-ant-size={size ?? DS_TO_ANT_SIZE[resolvedSize]}\n >\n <div className=\"ds-segmented-group\">\n {normalizedOptions.map((option, index) => {\n const checked = option.value === selectedValue;\n const optionDisabled = disabled || option.disabled;\n\n return (\n <button\n key={`${String(option.value)}-${index}`}\n type=\"button\"\n className=\"ds-segmented-item\"\n role=\"radio\"\n aria-checked={checked ? 'true' : 'false'}\n aria-disabled={optionDisabled ? 'true' : 'false'}\n tabIndex={checked ? 0 : -1}\n onClick={() => handleSelect(option)}\n title={option.title}\n name={name}\n disabled={!!optionDisabled}\n >\n <span className=\"ds-segmented-item-label\">\n {option.icon ? <span className=\"ds-segmented-item-icon\">{option.icon}</span> : null}\n <span>{option.label ?? option.value}</span>\n </span>\n </button>\n );\n })}\n </div>\n </div>\n );\n};\n","import { Modal as AntModal } from 'antd';\nimport type { ModalProps as AntModalProps } from 'antd';\nimport { Space } from 'antd';\nimport { useEffect } from 'react';\nimport type { ReactNode } from 'react';\nimport { Button as DSButton } from '../forms';\nimport { dsSemanticTokens } from '../../theme/ontadaTheme';\n\nexport type DSModalColumns = '04' | '05' | '06' | '07' | '08' | '09' | '10' | '11';\nexport type DSModalFooter = 'default' | 'none';\nexport type DSModalSize = 'xs' | 'sm' | 'md' | 'lg' | 'full-screen';\nexport type DSModalDevice = 'desktop' | 'mobile';\nexport type DSModalActions = 'primary' | 'primary-secondary' | 'primary-secondary-tertiary';\nexport type DSModalHeader = 'default' | 'none';\n\nexport type ModalProps = AntModalProps & {\n /** Legacy width variant mapped from earlier Figma column sizes. */\n dsColumns?: DSModalColumns;\n /** Canonical DS footer visibility mode. */\n dsFooter?: DSModalFooter;\n /** New DS modal size variants from Figma. */\n dsSize?: DSModalSize;\n /** New DS responsive mode from Figma variants. */\n dsDevice?: DSModalDevice;\n /** Footer action configuration from Figma variants. */\n dsActions?: DSModalActions;\n /** Header visibility variant from Figma. */\n dsHeader?: DSModalHeader;\n /** Show required indicator in the title row. */\n dsRequired?: boolean;\n /** Optional leading icon for compact content variants. */\n dsLeadingIcon?: ReactNode;\n /** Explicit DS control over close icon visibility. */\n dsShowClose?: boolean;\n};\n\nconst WIDTH_BY_COLUMN: Record<DSModalColumns, number> = {\n '04': 608,\n '05': 764,\n '06': 920,\n '07': 1076,\n '08': 1232,\n '09': 1388,\n '10': 1544,\n '11': 1700,\n};\n\nconst WIDTH_BY_SIZE: Record<DSModalDevice, Record<DSModalSize, number | string>> = {\n desktop: {\n xs: dsSemanticTokens.modal.width.desktop.xs,\n sm: dsSemanticTokens.modal.width.desktop.sm,\n md: dsSemanticTokens.modal.width.desktop.md,\n lg: dsSemanticTokens.modal.width.desktop.lg,\n 'full-screen': dsSemanticTokens.modal.width.desktop.fullScreen,\n },\n mobile: {\n xs: dsSemanticTokens.modal.width.mobile.xs,\n sm: dsSemanticTokens.modal.width.mobile.sm,\n md: dsSemanticTokens.modal.width.mobile.md,\n lg: dsSemanticTokens.modal.width.mobile.lg,\n 'full-screen': dsSemanticTokens.modal.width.mobile.fullScreen,\n },\n};\n\nconst STYLE_ID = 'ds-modal-styles';\n\nfunction injectStyles() {\n if (typeof document === 'undefined') return;\n const { modal } = dsSemanticTokens;\n let style = document.getElementById(STYLE_ID) as HTMLStyleElement | null;\n if (!style) {\n style = document.createElement('style');\n style.id = STYLE_ID;\n document.head.appendChild(style);\n }\n\n style.textContent = `\n .ds-modal.ant-modal .ant-modal-container {\n border: ${modal.border.width} solid ${modal.border.color};\n border-radius: ${modal.border.radius};\n box-shadow: ${modal.shadow};\n padding: 0;\n overflow: hidden;\n background: ${modal.surface.background};\n }\n\n .ds-modal.ant-modal .ant-modal-header {\n position: relative;\n min-height: 56px;\n background: ${modal.surface.header};\n padding: ${modal.spacing.header.y} ${modal.spacing.header.x};\n margin: 0;\n border-bottom: ${modal.border.width} solid ${modal.border.color};\n }\n\n .ds-modal.ant-modal .ant-modal-title {\n color: ${modal.text.title};\n font-size: 22px;\n line-height: 26px;\n font-weight: 700;\n }\n\n .ds-modal.ant-modal .ant-modal-close {\n top: 15px;\n width: ${modal.closeButton.size};\n height: ${modal.closeButton.size};\n padding: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n inset-inline-end: 24px;\n color: ${modal.closeButton.color};\n border-radius: ${modal.closeButton.radius};\n background: transparent !important;\n border: none !important;\n box-shadow: none !important;\n }\n\n .ds-modal.ant-modal .ant-modal-close-x {\n width: ${modal.closeButton.iconSize};\n height: ${modal.closeButton.iconSize};\n display: flex;\n align-items: center;\n justify-content: center;\n line-height: 1;\n }\n\n .ds-modal.ant-modal .ant-modal-close:hover {\n color: ${modal.closeButton.color};\n background: transparent !important;\n border: none !important;\n box-shadow: none !important;\n }\n\n .ds-modal.ant-modal .ant-modal-close:focus-visible {\n outline: none !important;\n background: transparent !important;\n border: none !important;\n box-shadow: none !important;\n }\n\n .ds-modal.ant-modal .ant-modal-body {\n padding: ${modal.spacing.body.desktop};\n color: ${modal.text.body};\n font-size: 16px;\n line-height: 20px;\n letter-spacing: -0.016px;\n }\n\n .ds-modal.ant-modal .ant-modal-footer {\n min-height: 64px;\n margin: 0;\n padding: ${modal.spacing.footer.desktop};\n border-top: ${modal.border.width} solid ${modal.border.color};\n display: flex;\n align-items: center;\n justify-content: flex-end;\n }\n\n .ds-modal.ant-modal.ds-modal-mobile .ant-modal-header {\n padding: ${modal.spacing.header.y} ${modal.spacing.header.x};\n min-height: 58px;\n }\n\n .ds-modal.ant-modal.ds-modal-mobile .ant-modal-close {\n top: 15px;\n inset-inline-end: 24px;\n width: ${modal.closeButton.size};\n height: ${modal.closeButton.size};\n }\n\n .ds-modal.ant-modal.ds-modal-mobile .ant-modal-close-x {\n width: ${modal.closeButton.iconSize};\n height: ${modal.closeButton.iconSize};\n }\n\n .ds-modal.ant-modal.ds-modal-mobile .ant-modal-body {\n padding: ${modal.spacing.body.mobile};\n }\n\n .ds-modal.ant-modal.ds-modal-mobile .ant-modal-footer {\n padding: ${modal.spacing.footer.mobile};\n justify-content: stretch;\n }\n\n .ds-modal.ant-modal.ds-modal-size-full-screen {\n margin: 0;\n max-width: 100vw;\n top: 0;\n padding-bottom: 0;\n }\n\n .ds-modal.ant-modal.ds-modal-size-full-screen .ant-modal-container {\n border-radius: ${modal.border.fullScreenRadius};\n min-height: 100vh;\n box-shadow: none;\n }\n\n .ds-modal.ant-modal.ds-modal-size-full-screen .ant-modal-header {\n background: ${modal.surface.headerFullScreen};\n border-bottom: ${modal.border.width} solid ${modal.border.color};\n }\n\n .ds-modal.ant-modal.ds-modal-size-full-screen .ant-modal-body {\n min-height: calc(100vh - 120px);\n }\n\n .ds-modal.ant-modal.ds-modal-footer-none .ant-modal-footer {\n display: none;\n }\n `;\n}\n\nexport const Modal = ({\n dsColumns,\n dsFooter = 'default',\n dsSize = 'xs',\n dsDevice = 'desktop',\n dsActions = 'primary-secondary',\n dsHeader = 'default',\n dsRequired = false,\n dsLeadingIcon,\n dsShowClose,\n className = '',\n footer,\n closable,\n title,\n children,\n width,\n style,\n okText = 'Apply',\n cancelText = 'Cancel',\n onCancel,\n onOk,\n styles,\n ...props\n}: ModalProps) => {\n useEffect(() => {\n injectStyles();\n }, []);\n\n const resolvedWidth = width ?? (dsColumns ? WIDTH_BY_COLUMN[dsColumns] : WIDTH_BY_SIZE[dsDevice][dsSize]);\n\n const showClose = dsShowClose ?? closable ?? true;\n const hasHeader = dsHeader !== 'none';\n\n const resolvedTitle = !hasHeader\n ? null\n : dsRequired\n ? (\n <span style={{ display: 'inline-flex', alignItems: 'center', gap: 8 }}>\n <span>{title ?? 'Title'}</span>\n <span style={{ color: dsSemanticTokens.modal.text.required, fontSize: 12, fontWeight: 400 }}>* Required</span>\n </span>\n )\n : (title ?? 'Title');\n\n const footerGap = dsDevice === 'mobile' ? 12 : 16;\n\n const resolvedFooter =\n footer !== undefined\n ? footer\n : dsFooter === 'none'\n ? null\n : (\n <Space direction={dsDevice === 'mobile' ? 'vertical' : 'horizontal'} size={footerGap} style={{ width: dsDevice === 'mobile' ? '100%' : undefined }}>\n {dsActions === 'primary-secondary-tertiary' && (\n <DSButton dsVariant=\"tertiary\" style={dsDevice === 'mobile' ? { width: '100%' } : undefined} onClick={(e) => onCancel?.(e)}>\n LABEL\n </DSButton>\n )}\n {dsActions !== 'primary' && (\n <DSButton dsVariant=\"secondary\" style={dsDevice === 'mobile' ? { width: '100%' } : undefined} onClick={(e) => onCancel?.(e)}>\n {String(cancelText).toUpperCase()}\n </DSButton>\n )}\n <DSButton dsVariant=\"primary\" style={dsDevice === 'mobile' ? { width: '100%' } : undefined} onClick={(e) => onOk?.(e)}>\n {String(okText).toUpperCase()}\n </DSButton>\n </Space>\n );\n\n const bodyWithOptionalIcon = dsLeadingIcon ? (\n <div style={{ display: 'flex', alignItems: 'flex-start', gap: 16 }}>\n <div style={{ paddingTop: 4 }}>{dsLeadingIcon}</div>\n <div style={{ flex: 1, minWidth: 0 }}>{children}</div>\n </div>\n ) : children;\n\n return (\n <AntModal\n {...props}\n width={resolvedWidth}\n title={resolvedTitle}\n closable={showClose}\n footer={resolvedFooter}\n onCancel={onCancel}\n onOk={onOk}\n className={`ds-modal ds-modal-footer-${dsFooter} ds-modal-size-${dsSize} ${dsDevice === 'mobile' ? 'ds-modal-mobile' : 'ds-modal-desktop'} ${className}`.trim()}\n style={{\n ...style,\n maxWidth: dsSize === 'full-screen' ? '100vw' : 'calc(100vw - 32px)',\n }}\n styles={{\n ...styles,\n mask: {\n backgroundColor: dsSemanticTokens.modal.backdrop,\n ...styles?.mask,\n },\n }}\n data-ds-modal\n data-ds-columns={dsColumns ?? ''}\n data-ds-footer={dsFooter}\n data-ds-size={dsSize}\n data-ds-device={dsDevice}\n data-ds-actions={dsActions}\n data-ds-header={dsHeader}\n >\n {bodyWithOptionalIcon}\n </AntModal>\n );\n};\n","import type { CSSProperties, ReactNode } from 'react';\nimport { useCustomIcon } from '../../utils/icons';\n\nexport type DSFeedbackStatus = 'success' | 'info' | 'warning' | 'error';\n\nconst statusIconNameByStatus: Record<DSFeedbackStatus, string> = {\n success: 'check1',\n info: 'informationCircle',\n warning: 'alertTriangle',\n error: 'removeCircleBold',\n};\n\nconst statusIconColorByStatus: Record<DSFeedbackStatus, string> = {\n success: '#2e8540',\n info: '#627386',\n warning: '#b05d23',\n error: '#c53026',\n};\n\nfunction mergeClassNames(...names: Array<string | undefined>) {\n return names.filter(Boolean).join(' ');\n}\n\nexport function getDSFeedbackStatusIcon(\n status: DSFeedbackStatus,\n options?: {\n size?: number;\n className?: string;\n style?: CSSProperties;\n }\n): ReactNode {\n return useCustomIcon(statusIconNameByStatus[status], {\n ...options,\n className: mergeClassNames('anticon', 'ds-feedback-status-icon', options?.className),\n style: {\n color: statusIconColorByStatus[status],\n display: 'inline-flex',\n alignItems: 'center',\n marginInlineEnd: 8,\n ...options?.style,\n },\n });\n}\n\nexport function getDSPopconfirmIcon(\n options?: {\n size?: number;\n className?: string;\n style?: CSSProperties;\n }\n): ReactNode {\n return getDSFeedbackStatusIcon('warning', options);\n}\n","import { message } from 'antd';\nimport type { MessageArgsProps } from 'antd';\nimport type { ReactNode } from 'react';\nimport { getDSFeedbackStatusIcon, type DSFeedbackStatus } from './feedbackIcons';\n\ntype MessageConfig = MessageArgsProps;\ntype MessageType = MessageArgsProps['type'];\ntype MessageApi = ReturnType<typeof message.useMessage>[0];\n\nconst DS_MESSAGE_ICON_SIZE = 18;\n\nfunction withDS(config: MessageConfig): MessageConfig {\n if (!config.type || config.icon !== undefined || !isFeedbackStatus(config.type)) {\n return config;\n }\n\n return {\n ...config,\n icon: getDSFeedbackStatusIcon(config.type, { size: DS_MESSAGE_ICON_SIZE }),\n };\n}\n\nfunction isFeedbackStatus(type: MessageType): type is DSFeedbackStatus {\n return type === 'success' || type === 'info' || type === 'warning' || type === 'error';\n}\n\nfunction toConfig(content: ReactNode | MessageConfig, type?: MessageType): MessageConfig {\n if (typeof content === 'object' && content !== null && !Array.isArray(content) && 'content' in content) {\n return type && (content as MessageConfig).type === undefined\n ? { ...(content as MessageConfig), type }\n : (content as MessageConfig);\n }\n\n return { content, type };\n}\n\nexport function useMessage() {\n const [api, contextHolder] = message.useMessage();\n\n const dsApi = {\n ...api,\n open: (config: MessageConfig) => api.open(withDS(config)),\n success: (content: ReactNode | MessageConfig) => api.open(withDS(toConfig(content, 'success'))),\n info: (content: ReactNode | MessageConfig) => api.open(withDS(toConfig(content, 'info'))),\n warning: (content: ReactNode | MessageConfig) => api.open(withDS(toConfig(content, 'warning'))),\n error: (content: ReactNode | MessageConfig) => api.open(withDS(toConfig(content, 'error'))),\n loading: (content: ReactNode | MessageConfig) => api.open(toConfig(content, 'loading')),\n } as MessageApi;\n\n return [dsApi, contextHolder] as const;\n}\n\nexport const messageDS = {\n open: (config: MessageConfig) => message.open(withDS(config)),\n success: (content: ReactNode | MessageConfig) => message.open(withDS(toConfig(content, 'success'))),\n info: (content: ReactNode | MessageConfig) => message.open(withDS(toConfig(content, 'info'))),\n warning: (content: ReactNode | MessageConfig) => message.open(withDS(toConfig(content, 'warning'))),\n error: (content: ReactNode | MessageConfig) => message.open(withDS(toConfig(content, 'error'))),\n loading: (content: ReactNode | MessageConfig) => message.open(toConfig(content, 'loading')),\n destroy: (key?: React.Key) => message.destroy(key),\n};\n","import { notification } from 'antd';\nimport type { NotificationArgsProps } from 'antd';\nimport type { ReactNode } from 'react';\nimport { useEffect } from 'react';\nimport { getDSFeedbackStatusIcon, type DSFeedbackStatus } from './feedbackIcons';\n\nconst STYLE_ID = 'ds-notification-styles';\nconst DS_NOTIFICATION_ICON_SIZE = 20;\n\nfunction injectStyles() {\n if (typeof document === 'undefined') return;\n\n let style = document.getElementById(STYLE_ID) as HTMLStyleElement | null;\n if (!style) {\n style = document.createElement('style');\n style.id = STYLE_ID;\n document.head.appendChild(style);\n }\n\n style.textContent = `\n .ds-notification.ant-notification-notice,\n .ds-notification .ant-notification-notice-wrapper,\n .ds-notification .ant-notification-notice-message,\n .ds-notification .ant-notification-notice-description,\n .ds-notification .ant-notification-notice-actions,\n .ds-notification .ds-notification-title,\n .ds-notification .ds-notification-description {\n font-family: 'Nunito', sans-serif !important;\n }\n\n .ds-notification .ant-notification-notice-message {\n font-weight: 700;\n }\n\n .ds-notification .ant-notification-notice-description {\n font-weight: 600;\n }\n `;\n}\n\nfunction mergeClassNames(...names: Array<string | undefined>) {\n return names.filter(Boolean).join(' ');\n}\n\nfunction wrapNode(node: ReactNode, className: string) {\n if (node === undefined || node === null) return node;\n return <span className={className}>{node}</span>;\n}\n\nfunction isFeedbackStatus(type: NotificationArgsProps['type']): type is DSFeedbackStatus {\n return type === 'success' || type === 'info' || type === 'warning' || type === 'error';\n}\n\nfunction withDS(config: NotificationArgsProps, fallbackType?: DSFeedbackStatus): NotificationArgsProps {\n injectStyles();\n const resolvedType = config.type ?? fallbackType;\n\n return {\n ...config,\n className: mergeClassNames('ds-notification', config.className),\n icon:\n config.icon ?? (isFeedbackStatus(resolvedType) ? getDSFeedbackStatusIcon(resolvedType, { size: DS_NOTIFICATION_ICON_SIZE }) : undefined),\n message: wrapNode(config.message, 'ds-notification-title'),\n title: wrapNode(config.title, 'ds-notification-title'),\n description: wrapNode(config.description, 'ds-notification-description'),\n };\n}\n\ntype NotificationApi = ReturnType<typeof notification.useNotification>[0];\n\nexport function useNotification() {\n const [api, contextHolder] = notification.useNotification();\n\n useEffect(() => {\n injectStyles();\n }, []);\n\n const dsApi: NotificationApi = {\n open: (config) => api.open(withDS(config)),\n success: (config) => api.success(withDS(config, 'success')),\n info: (config) => api.info(withDS(config, 'info')),\n warning: (config) => api.warning(withDS(config, 'warning')),\n error: (config) => api.error(withDS(config, 'error')),\n destroy: (key) => api.destroy(key),\n };\n\n return [dsApi, contextHolder] as const;\n}\n\nexport const notificationDS = {\n open: (config: NotificationArgsProps) => notification.open(withDS(config)),\n success: (config: NotificationArgsProps) => notification.success(withDS(config, 'success')),\n info: (config: NotificationArgsProps) => notification.info(withDS(config, 'info')),\n warning: (config: NotificationArgsProps) => notification.warning(withDS(config, 'warning')),\n error: (config: NotificationArgsProps) => notification.error(withDS(config, 'error')),\n destroy: (key?: React.Key) => notification.destroy(key),\n};\n","import { Popconfirm as AntPopconfirm } from 'antd';\nimport type { PopconfirmProps } from 'antd';\nimport { getDSPopconfirmIcon } from './feedbackIcons';\n\nconst DS_POPCONFIRM_ICON_SIZE = 16;\n\nexport type DSPopconfirmProps = PopconfirmProps;\n\nexport function Popconfirm({ icon, ...props }: DSPopconfirmProps) {\n return (\n <AntPopconfirm\n {...props}\n icon={icon ?? getDSPopconfirmIcon({ size: DS_POPCONFIRM_ICON_SIZE })}\n />\n );\n}\n","import { Spin as AntSpin } from 'antd';\nimport type { SpinProps } from 'antd';\nimport type { CSSProperties } from 'react';\nimport { useEffect } from 'react';\nimport { dsSemanticTokens } from '../../theme/ontadaTheme';\n\nconst STYLE_ID = 'ds-spin-styles';\nconst DS_SPIN_CLASS = 'ds-spin';\nconst DS_SPIN_INDICATOR_CLASS = 'ds-spin-circular-loader';\n\ntype DSSpinSize = NonNullable<SpinProps['size']>;\n\nexport type DSSpinProps = SpinProps & {\n dsLoaderSize?: string | number;\n};\n\nconst loaderSizeBySpinSize: Record<DSSpinSize, string> = {\n small: '24px',\n default: '40px',\n middle: '40px',\n medium: '40px',\n large: '75px',\n};\n\nfunction injectStyles() {\n if (typeof document === 'undefined') return;\n\n let style = document.getElementById(STYLE_ID) as HTMLStyleElement | null;\n if (!style) {\n style = document.createElement('style');\n style.id = STYLE_ID;\n document.head.appendChild(style);\n }\n\n const { button, input } = dsSemanticTokens;\n style.textContent = `\n @keyframes ds-spin-circular-loader-rotate {\n to { transform: rotate(360deg); }\n }\n\n .${DS_SPIN_CLASS}.ant-spin,\n .${DS_SPIN_CLASS}.ant-spin-nested-loading,\n .${DS_SPIN_CLASS}.ant-spin .ant-spin-text {\n font-family: 'Nunito', sans-serif !important;\n }\n\n .${DS_SPIN_CLASS}.ant-spin .ant-spin-dot {\n width: var(--ds-spin-loader-size, ${loaderSizeBySpinSize.default}) !important;\n height: var(--ds-spin-loader-size, ${loaderSizeBySpinSize.default}) !important;\n display: inline-flex !important;\n align-items: center;\n justify-content: center;\n margin: 0 !important;\n transform: none !important;\n }\n\n .${DS_SPIN_CLASS}.ant-spin .ant-spin-dot-holder {\n color: ${button.primary.default} !important;\n }\n\n .${DS_SPIN_INDICATOR_CLASS} {\n width: var(--ds-spin-loader-size, ${loaderSizeBySpinSize.default});\n height: var(--ds-spin-loader-size, ${loaderSizeBySpinSize.default});\n display: inline-block;\n border-radius: 50%;\n background: conic-gradient(${button.primary.default} 0deg 92deg, ${input.background.disabled} 92deg 360deg);\n animation: ds-spin-circular-loader-rotate 1s linear infinite;\n position: relative;\n }\n\n .${DS_SPIN_INDICATOR_CLASS}::after {\n content: '';\n position: absolute;\n inset: 18%;\n border-radius: 50%;\n background: ${input.background.default};\n }\n\n .${DS_SPIN_CLASS}.ant-spin .ant-spin-text,\n .${DS_SPIN_CLASS}.ant-spin-nested-loading .ant-spin-text {\n color: ${input.text.focus} !important;\n font-size: 14px;\n line-height: 18px;\n font-weight: 600;\n margin-top: 8px;\n }\n\n .${DS_SPIN_CLASS}.ant-spin-sm .${DS_SPIN_INDICATOR_CLASS} {\n --ds-spin-loader-size: ${loaderSizeBySpinSize.small};\n }\n\n .${DS_SPIN_CLASS}.ant-spin-lg .${DS_SPIN_INDICATOR_CLASS} {\n --ds-spin-loader-size: ${loaderSizeBySpinSize.large};\n }\n\n .${DS_SPIN_CLASS}.ant-spin-fullscreen {\n background: rgba(242, 246, 250, 0.72) !important;\n }\n `;\n}\n\nfunction mergeClassNames(...names: Array<string | undefined>) {\n return names.filter(Boolean).join(' ');\n}\n\nfunction formatLoaderSize(size: string | number | undefined, spinSize: SpinProps['size']) {\n if (size === undefined) {\n return loaderSizeBySpinSize[spinSize ?? 'default'];\n }\n\n return typeof size === 'number' ? `${size}px` : size;\n}\n\nfunction CircularLoader() {\n return <span className={DS_SPIN_INDICATOR_CLASS} aria-hidden=\"true\" />;\n}\n\nexport function Spin({ className, indicator, size = 'default', style, dsLoaderSize, ...props }: DSSpinProps) {\n useEffect(() => {\n injectStyles();\n }, []);\n\n const mergedStyle: CSSProperties = {\n ...style,\n ['--ds-spin-loader-size' as string]: formatLoaderSize(dsLoaderSize, size),\n };\n\n return (\n <AntSpin\n {...props}\n size={size}\n className={mergeClassNames(DS_SPIN_CLASS, className)}\n indicator={indicator ?? <CircularLoader />}\n style={mergedStyle}\n />\n );\n}\n","import { ConfigProvider, FloatButton as AntFloatButton } from 'antd';\nimport type { ComponentProps } from 'react';\n\nexport type FloatButtonProps = ComponentProps<typeof AntFloatButton>;\nexport type FloatButtonGroupProps = ComponentProps<typeof AntFloatButton.Group>;\nexport type FloatButtonBackTopProps = ComponentProps<typeof AntFloatButton.BackTop>;\n\ntype DSFloatButtonComponent = ((props: FloatButtonProps) => JSX.Element) & {\n Group: (props: FloatButtonGroupProps) => JSX.Element;\n BackTop: (props: FloatButtonBackTopProps) => JSX.Element;\n};\n\nconst FloatButtonBase = (props: FloatButtonProps) => (\n <ConfigProvider wave={{ disabled: true }}>\n <AntFloatButton {...props} />\n </ConfigProvider>\n);\n\nconst FloatButtonGroup = (props: FloatButtonGroupProps) => (\n <ConfigProvider wave={{ disabled: true }}>\n <AntFloatButton.Group {...props} />\n </ConfigProvider>\n);\n\nconst FloatButtonBackTop = (props: FloatButtonBackTopProps) => (\n <ConfigProvider wave={{ disabled: true }}>\n <AntFloatButton.BackTop {...props} />\n </ConfigProvider>\n);\n\nexport const FloatButton = Object.assign(FloatButtonBase, {\n Group: FloatButtonGroup,\n BackTop: FloatButtonBackTop,\n}) as DSFloatButtonComponent;\n"],"mappings":";;;;;;AAiBA,IAAM,KAAW,oBAkBJ,MAAU,EACrB,eAAY,WACZ,cAAW,IACX,OAAO,IAAY,EAAE,EACrB,WAAW,IAAgB,IAC3B,GAAG,QACc;AAEjB,SAAgB;AACd,MAAI,OAAO,WAAa,OAAe,CAAC,SAAS,eAAe,GAAS,EAAE;GACzE,IAAM,IAAQ,SAAS,cAAc,QAAQ;AAC7C,KAAM,KAAK;GACX,IAAM,EAAE,cAAW;AAmPnB,GAlPA,EAAM,cAAc;;8BAEI,EAAO,QAAQ,QAAQ;oCACjB,EAAO,QAAQ,MAAM;sCACnB,EAAO,QAAQ,QAAQ;mCAC1B,EAAO,QAAQ,KAAK;4CACX,EAAO,QAAQ,aAAa;0CAC9B,EAAO,QAAQ,WAAW;;qCAE/B,EAAO,UAAU,YAAY;uCAC3B,EAAO,UAAU,cAAc;mCACnC,EAAO,UAAU,UAAU;2CACnB,EAAO,UAAU,UAAU;6CACzB,EAAO,UAAU,YAAY;yCACjC,EAAO,UAAU,QAAQ;6CACrB,EAAO,UAAU,YAAY;+CAC3B,EAAO,UAAU,cAAc;2CACnC,EAAO,UAAU,UAAU;8CACxB,EAAO,UAAU,aAAa;gDAC5B,EAAO,UAAU,eAAe;4CACpC,EAAO,UAAU,WAAW;;oCAEpC,EAAO,SAAS,YAAY;0CACtB,EAAO,SAAS,UAAU;4CACxB,EAAO,SAAS,YAAY;6CAC3B,EAAO,SAAS,aAAa;;wCAElC,EAAO,YAAY,YAAY;8CACzB,EAAO,YAAY,UAAU;gDAC3B,EAAO,YAAY,YAAY;iDAC9B,EAAO,YAAY,aAAa;;sCAE3C,EAAO,WAAW,MAAM,SAAS;6CAC1B,EAAO,WAAW,MAAM,WAAW;gDAChC,EAAO,WAAW,MAAM,cAAc;uCAC/C,EAAO,WAAW,OAAO,SAAS;8CAC3B,EAAO,WAAW,OAAO,WAAW;iDACjC,EAAO,WAAW,OAAO,cAAc;sCAClD,EAAO,WAAW,MAAM,SAAS;6CAC1B,EAAO,WAAW,MAAM,WAAW;gDAChC,EAAO,WAAW,MAAM,cAAc;;;;;;;yBAO7D,EAAO,WAAW,WAAW;4BAC1B,EAAO,WAAW,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAkMtD,SAAS,KAAK,YAAY,EAAM;;IAEjC,EAAE,CAAC;CAGN,IAAM,WASG;EAPL,GAAG;EACH,WAAW;EACX,YAAY;EACZ,WAAW;EACX,yBAAyB;EAGpB;AAmCT,QA/BI,MAAc,cAEd,kBAAC,GAAD;EAAgB,MAAM,EAAE,UAAU,IAAM;YACtC,kBAAC,GAAD;GACE,MAAK;GACK;GACV,OAAO,GAAW;GAClB,WAAW;GACX,mBAAiB;GACjB,GAAI;GACJ,CAAA;EACa,CAAA,GAIjB,MAAc,cAAc,MAAc,iBAE1C,kBAAC,GAAD;EAAgB,MAAM,EAAE,UAAU,IAAM;YACtC,kBAAC,GAAD;GACE,MAAK;GACK;GACV,OAAO,GAAW;GAClB,WAAW;GACX,mBAAiB;GACjB,GAAI;GACJ,CAAA;EACa,CAAA,GAMnB,kBAAC,GAAD;EAAgB,MAAM,EAAE,UAAU,IAAM;YACtC,kBAAC,GAAD;GACE,MAAK;GACK;GACV,OAAO,GAAW;GAClB,WAAW;GACX,mBAAiB;GACjB,GAAI;GACJ,CAAA;EACa,CAAA;;AAIrB,GAAO,cAAc,UACrB,GAAO,QAAQ,EAAU;;;49nYC7VZ,KAA0C;CAErD,iBAAiB;CACjB,WAAW;CACX,UAAU;CACV,YAAY;CAGZ,YAAY;CACZ,mBAAmB;CACnB,oBAAoB;CACpB,kBAAkB;CAClB,mBAAmB;CACnB,kBAAkB;CAClB,eAAe;CACf,uBAAuB;CACvB,uBAAuB;CACvB,qBAAqB;CACrB,qBAAqB;CACrB,wBAAwB;CACxB,YAAY;CACZ,QAAQ;CAGR,YAAY;CACZ,gBAAgB;CAChB,aAAa;CACb,SAAS;CACT,YAAY;CACZ,YAAY;CAGZ,0BAA0B;CAC1B,0BAA0B;CAC1B,uBAAuB;CACvB,uBAAuB;CAGvB,cAAc;CACd,SAAS;CACT,OAAO;CACP,aAAa;CACb,eAAe;CACf,+BAA+B;CAC/B,cAAc;CACd,gBAAgB;CAChB,UAAU;CAGV,KAAK;CACL,oBAAoB;CACpB,eAAe;CACf,YAAY;CACZ,WAAW;CACX,cAAc;CACd,eAAe;CACf,gBAAgB;CAChB,aAAa;CACb,eAAe;CACf,mBAAmB;CAGnB,iBAAiB;CACjB,kBAAkB;CAClB,kBAAkB;CAClB,mBAAmB;CACnB,mBAAmB;CACnB,eAAe;CACf,YAAY;CACZ,WAAW;CACX,YAAY;CACZ,WAAW;CACX,aAAa;CACb,YAAY;CACZ,UAAU;CACV,SAAS;CACT,sBAAsB;CACtB,sBAAsB;CACtB,uBAAuB;CACvB,oBAAoB;CACpB,gBAAgB;CAChB,cAAc;CAGd,YAAY;CACZ,KAAK;CACL,cAAc;CACd,WAAW;CACX,cAAc;CACd,gBAAgB;CAChB,sBAAsB;CACtB,kBAAkB;CAClB,iBAAiB;CACjB,gBAAgB;CAChB,eAAe;CACf,iBAAiB;CAGjB,WAAW;CACX,mBAAmB;CACnB,cAAc;CACd,qBAAqB;CACrB,oBAAoB;CACpB,qBAAqB;CACrB,qBAAqB;CACrB,eAAe;CACf,oBAAoB;CAGpB,UAAU;CACV,WAAW;CACX,mBAAmB;CAGnB,QAAQ;CACR,QAAQ;CACR,cAAc;CACd,uBAAuB;CACvB,OAAO;CAGP,KAAK;CACL,QAAQ;CACR,QAAQ;CACR,6BAA6B;CAC7B,4BAA4B;CAG5B,sBAAsB;CACtB,UAAU;CACV,mBAAmB;CACnB,iBAAiB;CACjB,gBAAgB;CAChB,wBAAwB;CAGxB,gBAAgB;CAChB,WAAW;CACX,cAAc;CAGd,sBAAsB;CACtB,mBAAmB;CACnB,oBAAoB;CAGpB,UAAU;CACV,oBAAoB;CACpB,oBAAoB;CACpB,oBAAoB;CACpB,uBAAuB;CAGvB,cAAc;CACd,iBAAiB;CACjB,gBAAgB;CAChB,cAAc;CACd,eAAe;CACf,iBAAiB;CACjB,kBAAkB;CAClB,aAAa;CACb,sBAAsB;CACtB,cAAc;CACd,OAAO;CACP,OAAO;CACP,UAAU;CACV,UAAU;CACV,gBAAgB;CAGhB,mBAAmB;CACnB,gBAAgB;CAGhB,QAAQ;CACR,aAAa;CACb,cAAc;CACd,uBAAuB;CACvB,iBAAiB;CACjB,qBAAqB;CACrB,WAAW;CACX,gBAAgB;CAChB,uBAAuB;CACvB,kBAAkB;CAClB,yBAAyB;CACzB,iBAAiB;CACjB,+BAA+B;CAC/B,oBAAoB;CACpB,kBAAkB;CAClB,uBAAuB;CAGvB,gBAAgB;CAChB,WAAW;CACX,yBAAyB;CACzB,uBAAuB;CAGvB,MAAM;CACN,QAAQ;CAGR,OAAO;CACP,gBAAgB;CAChB,aAAa;CAGb,QAAQ;CACR,kBAAkB;CAClB,gBAAgB;CAChB,OAAO;CACP,QAAQ;CAGR,aAAa;CAGb,yBAAyB;CACzB,uBAAuB;CAGvB,eAAe;CACf,aAAa;CACb,sBAAsB;CAGtB,QAAQ;CACR,kBAAkB;CAClB,iBAAiB;CACjB,qBAAqB;CACrB,YAAY;CACZ,mBAAmB;CACnB,mBAAmB;CACnB,YAAY;CACZ,qBAAqB;CACrB,OAAO;CACP,0BAA0B;CAC1B,eAAe;CACf,cAAc;CACd,kCAAkC;CAClC,iBAAiB;CACjB,aAAa;CACb,mBAAmB;CACnB,iBAAiB;CACjB,WAAW;CACX,SAAS;CACT,OAAO;CACP,QAAQ;CACR,SAAS;CACT,eAAe;CACf,cAAc;CACd,iBAAiB;CACjB,2BAA2B;CAC3B,wBAAwB;CACxB,uBAAuB;CACvB,yBAAyB;CACzB,SAAS;CACV,EC3LK,KAAqB,uBAAA,OAAA;CAAA,iDAAA;CAAA,iEAAA;CAAA,+DAAA;CAAA,iDAAA;CAAA,oDAAA;CAAA,4CAAA;CAAA,2CAAA;CAAA,sDAAA;CAAA,uDAAA;CAAA,qDAAA;CAAA,sDAAA;CAAA,qDAAA;CAAA,iDAAA;CAAA,8CAAA;CAAA,2CAAA;CAAA,6DAAA;CAAA,6DAAA;CAAA,2DAAA;CAAA,2DAAA;CAAA,8CAAA;CAAA,+CAAA;CAAA,0CAAA;CAAA,kDAAA;CAAA,2CAAA;CAAA,8CAAA;CAAA,6CAAA;CAAA,yCAAA;CAAA,0CAAA;CAAA,gEAAA;CAAA,gEAAA;CAAA,6DAAA;CAAA,6DAAA;CAAA,qDAAA;CAAA,wCAAA;CAAA,yDAAA;CAAA,oDAAA;CAAA,sCAAA;CAAA,6CAAA;CAAA,iDAAA;CAAA,mDAAA;CAAA,sDAAA;CAAA,uDAAA;CAAA,iDAAA;CAAA,uDAAA;CAAA,mDAAA;CAAA,wDAAA;CAAA,yDAAA;CAAA,iDAAA;CAAA,sDAAA;CAAA,wDAAA;CAAA,kDAAA;CAAA,wDAAA;CAAA,sDAAA;CAAA,sDAAA;CAAA,yDAAA;CAAA,uDAAA;CAAA,oDAAA;CAAA,oDAAA;CAAA,qDAAA;CAAA,iDAAA;CAAA,6CAAA;CAAA,iDAAA;CAAA,6CAAA;CAAA,kDAAA;CAAA,8CAAA;CAAA,0DAAA;CAAA,0DAAA;CAAA,2DAAA;CAAA,wDAAA;CAAA,qDAAA;CAAA,mDAAA;CAAA,+CAAA;CAAA,2CAAA;CAAA,6CAAA;CAAA,wCAAA;CAAA,iDAAA;CAAA,iDAAA;CAAA,gDAAA;CAAA,gDAAA;CAAA,gDAAA;CAAA,mDAAA;CAAA,mDAAA;CAAA,yDAAA;CAAA,+CAAA;CAAA,0DAAA;CAAA,yDAAA;CAAA,0DAAA;CAAA,0DAAA;CAAA,iDAAA;CAAA,+CAAA;CAAA,4CAAA;CAAA,4CAAA;CAAA,mDAAA;CAAA,6DAAA;CAAA,0CAAA;CAAA,sCAAA;CAAA,qDAAA;CAAA,4DAAA;CAAA,0DAAA;CAAA,2DAAA;CAAA,qDAAA;CAAA,yDAAA;CAAA,0DAAA;CAAA,yCAAA;CAAA,2DAAA;CAAA,+CAAA;CAAA,yDAAA;CAAA,+DAAA;CAAA,6DAAA;CAAA,kDAAA;CAAA,4DAAA;CAAA,8CAAA;CAAA,8CAAA;CAAA,yDAAA;CAAA,6CAAA;CAAA,2CAAA;CAAA,6CAAA;CAAA,8CAAA;CAAA,sDAAA;CAAA,+DAAA;CAAA,sDAAA;CAAA,2CAAA;CAAA,8CAAA;CAAA,2DAAA;CAAA,4CAAA;CAAA,kDAAA;CAAA,4CAAA;CAAA,sDAAA;CAAA,uDAAA;CAAA,uDAAA;CAAA,wDAAA;CAAA,kDAAA;CAAA,qDAAA;CAAA,oDAAA;CAAA,kDAAA;CAAA,oDAAA;CAAA,wDAAA;CAAA,yDAAA;CAAA,iDAAA;CAAA,kDAAA;CAAA,yCAAA;CAAA,yCAAA;CAAA,qDAAA;CAAA,iDAAA;CAAA,mDAAA;CAAA,qEAAA;CAAA,kDAAA;CAAA,mDAAA;CAAA,6DAAA;CAAA,uDAAA;CAAA,iEAAA;CAAA,6DAAA;CAAA,qDAAA;CAAA,oDAAA;CAAA,oDAAA;CAAA,oDAAA;CAAA,kDAAA;CAAA,uDAAA;CAAA,gDAAA;CAAA,6CAAA;CAAA,6DAAA;CAAA,wDAAA;CAAA,uDAAA;CAAA,yDAAA;CAAA,2DAAA;CAAA,0DAAA;CAAA,sEAAA;CAAA,+CAAA;CAAA,mDAAA;CAAA,iDAAA;CAAA,oDAAA;CAAA,gDAAA;CAAA,wDAAA;CAAA,oDAAA;CAAA,4DAAA;CAAA,uDAAA;CAAA,oDAAA;CAAA,wCAAA;CAAA,sDAAA;CAAA,mDAAA;CAAA,iDAAA;CAAA,0DAAA;CAAA,iEAAA;CAAA,iEAAA;CAAA,0DAAA;CAAA,0CAAA;CAAA,6DAAA;CAAA,wEAAA;CAAA,4DAAA;CAAA,kDAAA;CAAA,mEAAA;CAAA,uDAAA;CAAA,qDAAA;CAAA,6DAAA;CAAA,oDAAA;CAAA,mDAAA;CAAA,gDAAA;CAAA,yCAAA;CAAA,yCAAA;CAAA,6CAAA;CAAA,6CAAA;CAAA,wCAAA;CAAA,yCAAA;CAAA,4CAAA;CAAA,6CAAA;EAIzB,EAGI,KAAyD;CAE7D,OAAO;CACP,OAAO;CACP,KAAK;CACL,aAAa;CACb,aAAa;CACb,aAAa;CACb,mBAAmB;CACnB,MAAM;CACN,YAAY;CACZ,UAAU;CACV,gBAAgB;CAGhB,QAAQ;CACR,QAAQ;CAGR,QAAQ;CACR,KAAK;CACL,MAAM;CACN,OAAO;CACP,MAAM;CACN,QAAQ;CACR,MAAM;CACN,UAAU;CACV,QAAQ;CACR,MAAM;CAGN,UAAU;CACV,SAAS;CACT,KAAK;CACL,MAAM;CACN,QAAQ;CAGR,MAAM;CACN,QAAQ;CACR,QAAQ;CAGR,MAAM;CACN,MAAM;CACN,OAAO;CAGP,MAAM;CACN,QAAQ;CAGR,SAAS;CACT,MAAM;CACN,OAAO;CACP,OAAO;CACP,OAAO;CACP,GAAG;CAGH,UAAU;CACV,MAAM;CAGN,MAAM;CACN,MAAM;CACN,OAAO;CACP,OAAO;CAGP,MAAM;CACN,MAAM;CACN,OAAO;CAGP,WAAW;CACX,OAAO;CACP,UAAU;CACV,WAAW;CACX,UAAU;CACV,KAAK;CAGL,OAAO;CACP,UAAU;CAGV,KAAK;CAGL,YAAY;CACZ,cAAc;CACd,UAAU;CAGV,OAAO;CACP,QAAQ;CACR,QAAQ;CAGR,MAAM;CACN,KAAK;CACL,QAAQ;CACR,cAAc;CACd,QAAQ;CACR,SAAS;CAGT,WAAW;CACX,aAAa;CACb,YAAY;CACZ,UAAU;CACV,YAAY;CACb,EAMY,MAKP,EAAE,aAAU,UAAO,IAAI,cAAW,eAAY;CAClD,IAAM,IAAa,GAAmB,8BAA8B;AAOpE,QALK,IAMH,kBAAC,QAAD;EACa;EACX,OAAO;GACL,OAAO;GACP,QAAQ;GACR,SAAS;GACT,YAAY;GACZ,gBAAgB;GAChB,YAAY;GACZ,GAAG;GACJ;EACD,yBAAyB,EAAE,QAAQ,GAAA;EACnC,CAAA,IAjBF,QAAQ,KAAK,yBAAyB,EAAS,mBAAmB,EAC3D,kBAAC,QAAD;EAAiB;YAAW;EAAS,CAAA;GAoCnC,MACX,GACA,MAKG;CACH,IAAM,EAAE,UAAO,IAAI,cAAW,aAAU,KAAW,EAAE,EAG/C,IAAU,GAAa;AAC7B,KAAI,EACF,QACE,kBAAC,GAAD;EACE,OAAO;GAAE,UAAU;GAAM,GAAG;GAAO;EACxB;EACX,CAAA;CAKN,IAAM,IAAiB,GAAgB;AAcvC,QAbI,IAEA,kBAAC,IAAD;EACE,UAAU;EACJ;EACK;EACJ;EACP,CAAA,IAKN,QAAQ,KAAK,SAAS,EAAS,2CAA2C,EACnE,kBAAC,QAAD;EAAiB;YAAW;EAAQ,CAAA;GAWhC,KAKP,EAAE,SAAM,UAAO,IAAI,cAAW,eAC3B,GAAc,GAAM;CAAE;CAAM;CAAW;CAAO,CAAC,EC1SlD,KAAW,oBAEJ,IAAkB,aAClB,IAA2B,sBAC3B,KAA8B,yBAC9B,KAA8B,yBAC9B,IAA2B,sBAC3B,IAAoC,iCACpC,KAAiC,4BAEjC,MAAmB,GAAG,MACjC,EAAW,OAAO,QAAQ,CAAC,KAAK,IAAI,CAAC,MAAM,EAEhC,WAA2B;AACtC,KAAI,OAAO,WAAa,OAAe,SAAS,eAAe,GAAS,CACtE;CAGF,IAAM,EAAE,aAAU,GACZ,IAAQ,SAAS,cAAc,QAAQ;AA69B7C,CA59BA,EAAM,KAAK,IAEX,EAAM,cAAc;OACf,EAAgB;;sBAED,EAAM,OAAO,aAAa;;;0BAGtB,EAAM,WAAW,QAAQ;;gCAEnB,EAAM,OAAO,aAAa,GAAG,EAAM,OAAO,QAAQ;;;;;;OAM3E,EAAgB;gBACP,EAAM,OAAO,aAAa;gCACV,EAAM,OAAO,aAAa,GAAG,EAAM,OAAO,QAAQ;;;OAG3E,EAAgB;;;;;;;;;;OAUhB,EAAgB;;;;;;OAMhB,EAAgB;;;;;;;;;;OAUhB,EAAgB;;;;;;;;;;;OAWhB,EAAgB;;;;;;;OAOhB,EAAgB;;;;;;;OAOhB,EAAgB;OAChB,EAAgB;;eAER,EAAM,KAAK,YAAY;;;;;;;OAO/B,EAAgB;OAChB,EAAgB;;eAER,EAAM,KAAK,MAAM;;;;;;OAMzB,EAAgB;OAChB,EAAgB;;;;OAIhB,EAAgB;OAChB,EAAgB;eACR,EAAM,KAAK,MAAM;;;;OAIzB,EAAgB;;;;;;OAMhB,EAAgB;OAChB,EAAgB;gBACP,EAAM,OAAO,aAAa;gCACV,EAAM,OAAO,aAAa,GAAG,EAAM,OAAO,MAAM;;;OAGzE,EAAgB,cAAc,GAA4B,kCAAkC,EAAyB;gBAC5G,EAAM,OAAO,aAAa;gCACV,EAAM,OAAO,aAAa,GAAG,EAAM,OAAO,MAAM;;;OAGzE,EAAgB;OAChB,EAAgB;;sBAED,EAAM,OAAO,aAAa;;gCAEhB,EAAM,OAAO,WAAW,GAAG,EAAM,OAAO,MAAM;;;OAGvE,EAAgB;OAChB,EAAgB;;sBAED,EAAM,OAAO,aAAa;;gCAEhB,EAAM,OAAO,WAAW,GAAG,EAAM,OAAO,MAAM;;;OAGvE,EAAgB;OAChB,EAAgB;OAChB,EAAgB;OAChB,EAAgB;;sBAED,EAAM,OAAO,aAAa;;gCAEhB,EAAM,OAAO,WAAW,GAAG,EAAM,OAAO,MAAM;;;OAGvE,EAAgB,cAAc,GAA4B,kCAAkC,EAAyB;;sBAEtG,EAAM,OAAO,aAAa;;gCAEhB,EAAM,OAAO,WAAW,GAAG,EAAM,OAAO,MAAM;;;OAGvE,EAAgB;;;;OAIhB,EAAgB;OAChB,EAAgB;;eAER,EAAM,KAAK,MAAM;;;OAGzB,EAAgB;OAChB,EAAgB;OAChB,EAAgB;OAChB,EAAgB;;;;;OAKhB,EAAgB,cAAc,GAA4B,kCAAkC,EAAyB;OACrH,EAAgB,cAAc,GAA4B,kCAAkC,EAAyB;;;;;OAKrH,EAAgB;;gCAES,EAAM,OAAO,aAAa,GAAG,EAAM,OAAO,MAAM;;;OAGzE,EAAgB;;gCAES,EAAM,OAAO,aAAa;;;OAGnD,EAAgB;;gCAES,EAAM,OAAO,aAAa,GAAG,EAAM,OAAO,QAAQ;;;OAG3E,EAAgB;0BACG,EAAM,WAAW,SAAS;;;;;OAK7C,EAAgB;OAChB,EAAgB;OAChB,EAAgB;eACR,EAAM,KAAK,SAAS;;;OAG5B,EAAgB,cAAc,EAAyB;0BACpC,EAAM,WAAW,SAAS;;gCAEpB,EAAM,OAAO,aAAa,GAAG,EAAM,OAAO,QAAQ;;;;OAI3E,EAAgB,cAAc,EAAyB;0BACpC,EAAM,WAAW,SAAS;oBAChC,EAAM,WAAW,SAAS;;;;OAIvC,EAAgB,cAAc,EAAyB;OACvD,EAAgB,cAAc,EAAyB;OACvD,EAAgB,cAAc,EAAyB;eAC/C,EAAM,KAAK,SAAS;;;OAG5B,EAAgB,cAAc,EAAyB;OACvD,EAAgB,cAAc,EAAyB;OACvD,EAAgB,cAAc,EAAyB;gCAC9B,EAAM,OAAO,aAAa,GAAG,EAAM,OAAO,QAAQ;;;OAG3E,EAAgB;oBACH,EAAM,OAAO,MAAM;gBACvB,EAAM,OAAO,MAAM;mBAChB,EAAM,QAAQ,MAAM,EAAE;;;OAGlC,EAAgB;OAChB,EAAgB;OAChB,EAAgB;oBACH,EAAM,OAAO,MAAM;;;;OAIhC,EAAgB;oBACH,EAAM,OAAO,OAAO;gBACxB,EAAM,OAAO,OAAO;mBACjB,EAAM,QAAQ,OAAO,EAAE;;;OAGnC,EAAgB;OAChB,EAAgB;OAChB,EAAgB;oBACH,EAAM,OAAO,OAAO;;;;OAIjC,EAAgB;oBACH,EAAM,OAAO,MAAM;gBACvB,EAAM,OAAO,MAAM;mBAChB,EAAM,QAAQ,MAAM,EAAE;;;OAGlC,EAAgB;OAChB,EAAgB;OAChB,EAAgB;oBACH,EAAM,OAAO,MAAM;;;;OAIhC,EAAyB;;;;;;;;;;;OAWzB,EAAyB;;;;;;;;;;;;;OAazB,EAAyB;;;;;;OAMzB,EAAyB;OACzB,EAAyB;;;;;;;;OAQzB,EAAyB;OACzB,EAAyB;;;;;;;;OAQzB,EAAyB;;;;;;;;;OASzB,EAAyB;;;;;;;;OAQzB,EAAyB,GAAG,GAA+B,4BAA4B,EAAkC;OACzH,EAAyB,GAAG,GAA+B,4BAA4B,EAAkC;OACzH,EAAyB,GAAG,GAA+B,4BAA4B,EAAkC;OACzH,EAAyB,GAAG,GAA+B,4BAA4B,EAAkC;;;;;;OAMzH,EAAyB,4BAA4B,EAAkC;;;;;;;;;;OAUvF,EAAyB,GAAG,GAA+B;;;;OAI3D,EAAyB;;;;;OAKzB,EAAyB;;;;;;;;;;OAUzB,EAAyB;;;;;;;;OAQzB,EAAyB;;;;;;;;;;;;;;;;;OAiBzB,EAAyB;OACzB,EAAyB;;;;;OAKzB,EAAyB;;;;;;;;;;;;;;;;;;;;OAoBzB,EAAyB;OACzB,EAAyB;OACzB,EAAyB;;;;;OAKzB,EAAyB;;;;;;;;;;;;;OAazB,EAAyB;OACzB,EAAyB;;;;;;;;;;;;OAYzB,EAAyB;;;;;;;;;;;;;;;;;OAiBzB,EAAyB;;;;;;;;;;;;;;;OAezB,EAAyB;;;;OAIzB,EAAyB,GAAG,EAAkC;;;;;;;;;;OAU9D,EAAyB,GAAG,EAAkC;;;;;;;;;;;;OAY9D,EAAyB,GAAG,EAAkC;;;;;;;;;;OAU9D,EAAyB,GAAG,EAAkC;;;;;;;OAO9D,EAAyB,GAAG,EAAkC;;;;;;;;;;OAU9D,EAAyB,GAAG,EAAkC;;;;OAI9D,EAAyB,GAAG,EAAkC;;;;;;;;OAQ9D,EAAyB,GAAG,EAAkC;;;;;;;;OAQ9D,EAAyB,GAAG,EAAkC;OAC9D,EAAyB,GAAG,EAAkC;;;;;OAK9D,EAAyB,GAAG,EAAkC;;;;;;;;;OAS9D,EAAyB,GAAG,EAAkC;;;;;;;;;OAS9D,EAAyB,GAAG,EAAkC;OAC9D,EAAyB,GAAG,EAAkC;OAC9D,EAAyB,GAAG,EAAkC;OAC9D,EAAyB,GAAG,EAAkC;;;;;;;;OAQ9D,EAAyB,GAAG,EAAkC;OAC9D,EAAyB,GAAG,EAAkC;OAC9D,EAAyB,GAAG,EAAkC;OAC9D,EAAyB,GAAG,EAAkC;;;;;OAK9D,EAAyB,GAAG,EAAkC;OAC9D,EAAyB,GAAG,EAAkC;;;;;;;;;;OAU9D,EAAyB,GAAG,EAAkC;;;;OAI9D,EAAyB,GAAG,EAAkC;;;;;;;;;;;;;;;;;OAiB9D,EAAyB,GAAG,EAAkC;OAC9D,EAAyB,GAAG,EAAkC;;;;;OAK9D,EAAyB,GAAG,EAAkC;;;;;;;;;;;;;;;;;;;;OAoB9D,EAAyB,GAAG,EAAkC;;;;;OAK9D,EAAyB,GAAG,EAAkC;;;;;;;;;;;;;OAa9D,EAAyB,GAAG,EAAkC;OAC9D,EAAyB,GAAG,EAAkC;;;;OAI9D,EAAyB,GAAG,EAAkC;OAC9D,EAAyB,GAAG,EAAkC;OAC9D,EAAyB,GAAG,EAAkC;;;;;;OAM9D,EAAyB,GAAG,EAAkC;;;;;;;;;;;;;;OAc9D,EAAyB,GAAG,EAAkC;;;;;;;;;;;;;OAa9D,EAAyB,GAAG,EAAkC;;;;;;;;;;;OAW9D,EAAyB,GAAG,EAAkC;;;;;OAK9D,EAAyB,GAAG,EAAkC;;;;;;;;;;;;;;;OAe9D,EAAyB,GAAG,EAAkC;;;;;OAK9D,EAAyB,GAAG,EAAkC;;;;;;;;;;;;;;OAc9D,EAAyB,GAAG,EAAkC;OAC9D,EAAyB,GAAG,EAAkC;;;;OAI9D,EAAyB,GAAG,EAAkC;OAC9D,EAAyB,GAAG,EAAkC;;;;;;OAM9D,EAAyB,GAAG,EAAkC;;;;;;;;;;;;;;;;OAgB9D,EAAyB,GAAG,EAAkC;;;;;OAK9D,EAAyB,GAAG,EAAkC;;;;;OAK9D,EAAyB,GAAG,EAAkC;;;;;;;;;;;;;;OAc9D,EAAyB,GAAG,EAAkC;;;;;OAK9D,EAAyB,GAAG,EAAkC;;;;;;;;;;;;;OAa9D,EAAyB,GAAG,EAAkC;;;;;;;;;;;;;;;OAe9D,EAAyB,GAAG,EAAkC;OAC9D,EAAyB,GAAG,EAAkC;;;;OAI9D,EAAyB,GAAG,EAAkC;OAC9D,EAAyB,GAAG,EAAkC;;;;;OAK9D,EAAyB,GAAG,EAAkC;;;;;;;;;;;;;;;;;;OAkB9D,EAAyB,GAAG,EAAkC;;;;;OAK9D,EAAyB,GAAG,EAAkC;;;;;;;;;;;;;;OAc9D,EAAyB,GAAG,EAAkC;;;;;OAK9D,EAAyB,GAAG,EAAkC;;;;;;;;;;;;;;OAc9D,EAAyB,GAAG,EAAkC;OAC9D,EAAyB,GAAG,EAAkC;;;;;;OAM9D,EAAyB,GAAG,EAAkC;;;;;;;;OAQ9D,EAAyB,GAAG,EAAkC;;;;;OAK9D,EAAyB,GAAG,EAAkC;OAC9D,EAAyB,GAAG,EAAkC;;;;;;;;OAQ9D,EAAyB,GAAG,EAAkC;;;;;OAK9D,EAAyB,GAAG,EAAkC;;;;;;;;;;;;;;OAc9D,EAAyB,GAAG,EAAkC;;;;;OAK9D,EAAyB,GAAG,EAAkC;;;;;;;;;;;;;KAenE,SAAS,KAAK,YAAY,EAAM;GC39BrB,MAAU,EACrB,WAAW,GACX,gBAAgB,GAChB,YAAY,GACZ,eACA,cAAW,IACX,sBAAmB,QACnB,SACA,iBACA,4BACA,GAAG,QACgB;CACnB,IAAM,CAAC,GAAQ,KAAa,GAAkB,EAAQ,EAAM;AAM5D,CAJA,QAAgB;AACd,MAAoB;IACnB,EAAE,CAAC,EAEN,QAAgB;AACd,EAAI,OAAO,KAAS,aAClB,EAAU,EAAK;IAEhB,CAAC,EAAK,CAAC;CAEV,IAAM,IAAc,EAAM,SAAS,cAAc,EAAM,SAAS,QAC1D,IAAwB,GAC5B,GACA,MAAqB,UAAU,KAA8B,KAAA,GAC7D,MAAqB,UAAU,KAA8B,KAAA,GAC7D,IAAW,IAA2B,KAAA,GACtC,EACD,EACK,IAAuB,GAC3B,GACA,IAAc,KAAiC,KAAA,GAC9C,GAA4B,OAAO,MACpC,EACD,EACK,IAAe,IAAW,KAAQ,GAElC,IAAmB;EACvB,GAAI,KAAsB,EAAE;EAC5B,OAAO;GACL,GAAK,GAA4B,SAAS,EAAE;GAC5C,MAAM;GACP;EACF,EAEK,IAAqB,KACzB,kBAAC,GAAD;EACE,MAAM,IAAS,kBAAkB;EACjC,MAAM;EACN,OAAO,EAAE,OAAO,EAAiB,MAAM,KAAK,OAAO;EACnD,CAAA;AAGJ,QACE,kBAAC,GAAD;EACE,GAAI;EACJ,MAAM;EACN,YAAY;EACZ,WAAW;EACX,YAAY;EACZ,eAAe,MAAa;AAC1B,OAAI,KAAY,GAAU;AACxB,MAAU,GAAM;AAChB;;AAIF,GAFA,EAAU,EAAS,EACnB,IAAe,EAAS,EACxB,IAA0B,EAAS;;EAErC,CAAA;;AAIN,GAAO,cAAc;;;ACjGrB,IAAM,KAAW,yBAEJ,IAAkB,kBAClB,IAAwB,wBAExB,MAAyB,GAAG,MACvC,EAAW,OAAO,QAAQ,CAAC,KAAK,IAAI,CAAC,MAAM,EAEhC,WAA+B;AAC1C,KAAI,OAAO,WAAa,OAAe,SAAS,eAAe,GAAS,CACtE;CAGF,IAAM,EAAE,WAAQ,aAAU,GACpB,IAAQ,SAAS,cAAc,QAAQ;AA6f7C,CA5fA,EAAM,KAAK,IAEX,EAAM,cAAc;;;;OAIf,EAAgB;;sBAED,EAAM,OAAO,aAAa;;;0BAGtB,EAAM,WAAW,QAAQ;gCACnB,EAAM,OAAO,aAAa,GAAG,EAAM,OAAO,QAAQ;oBAC9D,EAAM,OAAO,OAAO;gBACxB,EAAM,OAAO,OAAO;mBACjB,EAAM,QAAQ,OAAO,EAAE;;;;;;OAMnC,EAAgB;0BACG,EAAM,WAAW,SAAS;;gCAEpB,EAAM,OAAO,aAAa,GAAG,EAAM,OAAO,QAAQ;;;OAG3E,EAAgB;;gCAES,EAAM,OAAO,aAAa,GAAG,EAAM,OAAO,QAAQ;;;;;OAK3E,EAAgB;oBACH,EAAM,OAAO,MAAM;gBACvB,EAAM,OAAO,MAAM;mBAChB,EAAM,QAAQ,MAAM,EAAE;;;OAGlC,EAAgB;oBACH,EAAM,OAAO,MAAM;gBACvB,EAAM,OAAO,MAAM;mBAChB,EAAM,QAAQ,MAAM,EAAE;;;;;OAKlC,EAAgB;OAChB,EAAgB;;gCAES,EAAM,OAAO,aAAa,GAAG,EAAM,OAAO,MAAM;;;;;OAKzE,EAAgB;OAChB,EAAgB;;gCAES,EAAM,OAAO,WAAW,GAAG,EAAM,OAAO,MAAM;;;OAGvE,EAAgB;OAChB,EAAgB;;gCAES,EAAM,OAAO,WAAW,GAAG,EAAM,OAAO,MAAM;;;;;OAKvE,EAAgB;OAChB,EAAgB;;gCAES,EAAM,OAAO,aAAa,GAAG,EAAM,OAAO,MAAM;;;OAGzE,EAAgB;OAChB,EAAgB;;gCAES,EAAM,OAAO,aAAa;;;OAGnD,EAAgB;OAChB,EAAgB;;gCAES,EAAM,OAAO,aAAa,GAAG,EAAM,OAAO,QAAQ;;;;;OAK3E,EAAgB;0BACG,EAAM,WAAW,SAAS;;;;;;;OAO7C,EAAgB;;;;;;;OAOhB,EAAgB;eACR,EAAM,KAAK,YAAY;;;;;OAK/B,EAAgB;;qBAEF,EAAM,gBAAgB;;;OAGpC,EAAgB;eACR,EAAM,OAAO,MAAM;qBACb,EAAM,gBAAgB;;;OAGpC,EAAgB;eACR,EAAM,KAAK,SAAS;;;OAG5B,EAAgB;eACR,EAAM,KAAK,SAAS;;;;;;OAM5B,EAAgB;OAChB,EAAgB;eACR,EAAM,OAAO,QAAQ;;;;OAI7B,EAAgB;OAChB,EAAgB;eACR,EAAM,OAAO,QAAQ;;;OAG7B,EAAgB;OAChB,EAAgB;eACR,EAAM,OAAO,QAAQ;;;OAG7B,EAAgB;OAChB,EAAgB;eACR,EAAM,KAAK,SAAS;;;;;OAK5B,EAAgB;eACR,EAAM,KAAK,QAAQ;oBACd,EAAM,WAAW,QAAQ;;;OAGtC,EAAgB;eACR,EAAM,KAAK,MAAM;;;;;OAKzB,EAAsB;0BACH,EAAM,KAAK,MAAM;;oBAEvB,EAAM,WAAW,QAAQ;;;;;;OAMtC,EAAsB;;;;;;OAMtB,EAAsB;OACtB,EAAsB;OACtB,EAAsB;OACtB,EAAsB;OACtB,EAAsB;OACtB,EAAsB;;;;;;;OAOtB,EAAsB;;;eAGd,EAAM,KAAK,MAAM;;;;;;;OAOzB,EAAsB;eACd,EAAM,KAAK,MAAM;;;;;;;;;;OAUzB,EAAsB;eACd,EAAM,OAAO,MAAM;;;OAG3B,EAAsB;;;;;eAKd,EAAO,QAAQ,QAAQ;;;;;;;;OAQ/B,EAAsB;OACtB,EAAsB;OACtB,EAAsB;OACtB,EAAsB;;;;OAItB,EAAsB;eACd,EAAO,QAAQ,QAAQ;;;;wBAId,EAAO,WAAW,OAAO,cAAc;;;;;OAKxD,EAAsB;eACd,EAAO,QAAQ,MAAM;;;OAG7B,EAAsB;OACtB,EAAsB;eACd,EAAO,QAAQ,QAAQ;;;OAG/B,EAAsB;OACtB,EAAsB;;;;OAItB,EAAsB;OACtB,EAAsB;;;;;;;;eAQd,EAAM,KAAK,MAAM;;;OAGzB,EAAsB;OACtB,EAAsB;;;;OAItB,EAAsB;;;;OAItB,EAAsB;;;;OAItB,EAAsB;OACtB,EAAsB;;;;;;;;OAQtB,EAAsB;eACd,EAAM,OAAO,QAAQ;;;;;;;;;;;OAW7B,EAAsB;;;;OAItB,EAAsB;;;;;OAKtB,EAAsB;;;;OAItB,EAAsB;;;;OAItB,EAAsB;;;;;;OAMtB,EAAsB;;;;;;;;;;;;;;OActB,EAAsB;;;;eAId,EAAM,KAAK,MAAM;;;;;OAKzB,EAAsB;;;;OAItB,EAAsB;;;;;;;OAOtB,EAAsB;OACtB,EAAsB;;;;;;;;;OAStB,EAAsB;;;;;;OAMtB,EAAsB;OACtB,EAAsB;OACtB,EAAsB;OACtB,EAAsB;;;;;;;;;OAStB,EAAsB;OACtB,EAAsB;OACtB,EAAsB;OACtB,EAAsB;;;;;;;;;;OAUtB,EAAsB;OACtB,EAAsB;OACtB,EAAsB;OACtB,EAAsB;;;;;;;;OAQtB,EAAsB;OACtB,EAAsB;OACtB,EAAsB;;;;OAItB,EAAsB;OACtB,EAAsB;OACtB,EAAsB;OACtB,EAAsB;;;;OAItB,EAAsB;OACtB,EAAsB;;;;;;;;;OAStB,EAAsB;;;;;OAKtB,EAAsB;OACtB,EAAsB;;;;;;;OAOtB,EAAsB;;;;OAItB,EAAsB;eACd,EAAM,OAAO,MAAM;;;;;OAK3B,EAAsB;;;;;;OAMtB,EAAsB;;;;;;OAMtB,EAAsB;OACtB,EAAsB;OACtB,EAAsB;;;;OAItB,EAAsB;OACtB,EAAsB;;;;;;;;OAQtB,EAAsB;OACtB,EAAsB;OACtB,EAAsB;OACtB,EAAsB;;;;;;;OAOtB,EAAsB;OACtB,EAAsB;OACtB,EAAsB;;;;KAM3B,SAAS,KAAK,YAAY,EAAM;GCjgBrB,KAAiB,cAIjB,MAAc,EACzB,WAAW,GACX,gBAAgB,GAChB,YAAY,GACZ,GAAG,QACoB;AACvB,SAAgB;AACd,MAAwB;IACvB,EAAE,CAAC;CAEN,IAAM,IAAkB,GAAsB,GAAiB,EAAkB,EAC3E,IAA2B,GAC/B,GACC,GAA4B,OAAO,MACpC,EACD,EAEK,IAAmB;EACvB,GAAI,KAAsB,EAAE;EAC5B,OAAO;GACL,GAAK,GAA4B,SAAS,EAAE;GAC5C,MAAM;GACP;EACF,EAEK,IAAiB,EAAM,UAAA,cACvB,IAAsB,EAAM,eAAA;AAElC,QACE,kBAAC,GAAD;EACE,GAAI;EACJ,QAAQ;EACR,aAAa;EACb,WAAW;EACX,gBAAgB;EAChB,YAAY;EACZ,CAAA;;AAIN,GAAW,cAAc;AAEzB,IAAM,MAAiB,EACrB,WAAW,GACX,gBAAgB,GAChB,YAAY,GACZ,GAAG,QACqB;AACxB,SAAgB;AACd,MAAwB;IACvB,EAAE,CAAC;CAEN,IAAM,IAAkB,GAAsB,GAAiB,EAAkB,EAC3E,IAA2B,GAC/B,GACC,GAA4B,OAAO,MACpC,EACD,EAEK,IAAmB;EACvB,GAAI,KAAsB,EAAE;EAC5B,OAAO;GACL,GAAK,GAA4B,SAAS,EAAE;GAC5C,MAAM;GACP;EACF,EAEK,IAAiB,EAAM,UAAA,cACvB,IAAsB,EAAM,eAAe,CAAA,cAAA,aAAgC;AAEjF,QACE,kBAAC,EAAc,aAAf;EACE,GAAI;EACJ,QAAQ;EACR,aAAa;EACb,WAAW;EACX,gBAAgB;EAChB,YAAY;EACZ,CAAA;;AAIN,GAAc,cAAc,0BAG5B,GAA0E,cAAc;;;ACnGxF,IAAM,KAAW,yBAEJ,IAAuB,kBACvB,IAA6B,wBAE7B,MAA6B,GAAG,MAC3C,EAAW,OAAO,QAAQ,CAAC,KAAK,IAAI,CAAC,MAAM,EAEhC,WAA+B;AAC1C,KAAI,OAAO,WAAa,OAAe,SAAS,eAAe,GAAS,CACtE;CAGF,IAAM,EAAE,UAAO,cAAW,GACpB,IAAY,EAAS,SAAS,EAAE,EAChC,IAAY,OAAO,EAAU,UAAU,EACvC,IAAe,OAAO,EAAU,aAAa,EAC7C,IAAqB,EAAO,SAAS,YACrC,IAAiB,EAAO,SAAS,QACjC,IAAe,EAAO,SAAS,MAC/B,IAAmB,EAAM,KAAK,OAC9B,IAAwB,EAAM,WAAW,SACzC,IAAQ,SAAS,cAAc,QAAQ;AAiN7C,CAhNA,EAAM,KAAK,IAEX,EAAM,cAAc;;;OAGf,EAAqB;sBACN,EAAM,OAAO,QAAQ;sBACrB,EAAM,OAAO,aAAa;;;0BAGtB,EAAM,WAAW,QAAQ;gCACnB,EAAM,OAAO,aAAa,GAAG,EAAM,OAAO,QAAQ;oBAC9D,EAAM,OAAO,OAAO;gBACxB,EAAM,OAAO,OAAO;mBACjB,EAAM,QAAQ,OAAO,EAAE;;;eAG3B,EAAM,KAAK,QAAQ;;;;;;;OAO3B,EAAqB;sBACN,EAAM,OAAO,QAAQ;gCACX,EAAM,OAAO,aAAa,GAAG,EAAM,OAAO,QAAQ;;;OAG3E,EAAqB;oBACR,EAAM,OAAO,MAAM;gBACvB,EAAM,OAAO,MAAM;mBAChB,EAAM,QAAQ,MAAM,EAAE;;;OAGlC,EAAqB;oBACR,EAAM,OAAO,MAAM;gBACvB,EAAM,OAAO,MAAM;mBAChB,EAAM,QAAQ,MAAM,EAAE;;;;;OAKlC,EAAqB;OACrB,EAAqB;sBACN,EAAM,OAAO,MAAM;gCACT,EAAM,OAAO,aAAa,GAAG,EAAM,OAAO,MAAM;;;;;OAKzE,EAAqB;OACrB,EAAqB;sBACN,EAAM,OAAO,MAAM;gCACT,EAAM,OAAO,WAAW,GAAG,EAAM,OAAO,MAAM;0BACpD,EAAM,WAAW,MAAM;;;OAG1C,EAAqB;OACrB,EAAqB;sBACN,EAAM,OAAO,MAAM;gCACT,EAAM,OAAO,WAAW,GAAG,EAAM,OAAO,MAAM;;;;;OAKvE,EAAqB;OACrB,EAAqB;sBACN,EAAM,OAAO,MAAM;gCACT,EAAM,OAAO,aAAa,GAAG,EAAM,OAAO,MAAM;;;OAGzE,EAAqB;OACrB,EAAqB;sBACN,EAAa;gCACH,EAAM,OAAO,aAAa,GAAG,EAAa;;;OAGnE,EAAqB;OACrB,EAAqB;sBACN,EAAM,OAAO,QAAQ;gCACX,EAAM,OAAO,aAAa,GAAG,EAAM,OAAO,QAAQ;;;;;OAK3E,EAAqB;sBACN,EAAM,KAAK,SAAS;0BAChB,EAAM,WAAW,SAAS;gCACpB,EAAM,OAAO,aAAa,GAAG,EAAM,KAAK,SAAS;eAClE,EAAM,KAAK,SAAS;;;OAG5B,EAAqB;;;;eAIb,EAAU;;;OAGlB,EAAqB;eACb,EAAM,KAAK,YAAY;;;;;OAK/B,EAAqB;eACb,EAAM,KAAK,SAAS;;;;;OAK5B,EAAqB;eACb,EAAM,KAAK,QAAQ;oBACd,EAAM,WAAW,QAAQ;;;OAGtC,EAAqB;eACb,EAAM,KAAK,MAAM;;;;;OAKzB,EAA2B;0BACR,EAAM,KAAK,MAAM;;oBAEvB,EAAM,WAAW,QAAQ;iDACI,EAAiB,QAAQ,EAAsB;;;;;;;OAOzF,EAA2B;;;oBAGd,EAAM,WAAW,QAAQ;;;;OAItC,EAA2B;;;;;;;OAO3B,EAA2B;;;;;;OAM3B,EAA2B;eACnB,EAAM,KAAK,QAAQ;;;;;OAK3B,EAA2B;;;;;;;;OAQ3B,EAA2B;oBACd,EAAM,WAAW,MAAM;;;OAGpC,EAA2B;OAC3B,EAA2B;;;;eAInB,EAAa;;;;;OAKrB,EAA2B;OAC3B,EAA2B;oBACd,EAAmB;0BACb,EAAmB;;;gCAGb,EAAM,OAAO,aAAa,GAAG,EAAe;eAC7D,EAAa;;;;;OAKrB,EAA2B;OAC3B,EAA2B;oBACd,EAAmB;0BACb,EAAmB;;;;;;OAMtC,EAA2B;;;KAKhC,SAAS,KAAK,YAAY,EAAM;GCpNrB,MAAc,EACzB,WAAW,GACX,gBAAgB,GAChB,cAAW,OACX,YAAY,GACZ,QAAQ,GACR,GAAG,QACoB;AACvB,SAAgB;AACd,MAAwB;IACvB,EAAE,CAAC;CAEN,IAAM,IAAa,MAAa,SAAS,GACnC,IAAc,MAAa,QAAS,KAAkB,WAAa,KAAkB,YACrF,IAAkB,GAA0B,GAAsB,EAAkB,EACpF,IAAuB,GAC3B,GACA,EACD;AAED,QACE,kBAAC,IAAD;EACE,GAAI;EACJ,WAAW;EACX,gBAAgB;EACJ;EACZ,QAAQ;EACR,CAAA;;AAIN,GAAW,cAAc;;;AC/CzB,IAAM,KAAW,mBAIJ,MAAS,EAAE,eAAY,IAAI,GAAG,QAAwB;AACjE,SAAgB;AACd,MAAI,OAAO,WAAa,OAAe,CAAC,SAAS,eAAe,GAAS,EAAE;GACzE,IAAM,IAAQ,SAAS,cAAc,QAAQ;AAC7C,KAAM,KAAK;GACX,IAAM,EAAE,aAAU;AA0HlB,GAxHA,EAAM,cAAc;;;;;;;0BAOA,EAAM,OAAO,QAAQ;0BACrB,EAAM,OAAO,aAAa;;8BAEtB,EAAM,WAAW,QAAQ;mBACpC,EAAM,KAAK,QAAQ;;;;;;mBAMnB,EAAM,KAAK,YAAY;;;;;;;;;;0BAUhB,EAAM,OAAO,MAAM;;;;;8BAKf,EAAM,WAAW,SAAS;;;;;;;;;;;0BAW9B,EAAM,OAAO,MAAM;0BACnB,EAAM,OAAO,WAAW;;mBAE/B,EAAM,KAAK,MAAM;yBACX,EAAM,gBAAgB;;;;;;;mBAO5B,EAAM,KAAK,MAAM;;;;;0BAKV,EAAM,OAAO,MAAM;;;;;0BAKnB,EAAM,OAAO,QAAQ;;;;;;;;8BAQjB,EAAM,WAAW,SAAS;;mBAErC,EAAM,KAAK,SAAS;qCACF,EAAM,KAAK,SAAS;;;;;;8BAM3B,EAAM,WAAW,SAAS;0BAC9B,EAAM,OAAO,QAAQ;mBAC5B,EAAM,KAAK,SAAS;;;;;;mBAMpB,EAAM,KAAK,YAAY;;;;;oBAKtB,EAAM,OAAO,MAAM;wBACf,EAAM,OAAO,MAAM;qBACtB,EAAM,QAAQ,MAAM,EAAE,GAAG,EAAM,QAAQ,MAAM,EAAE;;;;;oBAKhD,EAAM,OAAO,OAAO;wBAChB,EAAM,OAAO,OAAO;qBACvB,EAAM,QAAQ,OAAO,EAAE,GAAG,EAAM,QAAQ,OAAO,EAAE;;;;;oBAKlD,EAAM,OAAO,MAAM;wBACf,EAAM,OAAO,MAAM;qBACtB,EAAM,QAAQ,MAAM,EAAE,GAAG,EAAM,QAAQ,MAAM,EAAE;;;;;;;;SAU9D,SAAS,KAAK,YAAY,EAAM;;IAEjC,EAAE,CAAC;CAEN,IAAM,IAAkB,YAAY,IAAY,MAAM;AAEtD,QAAO,kBAAC,GAAD;EAAU,GAAI;EAAO,WAAW;EAAmB,CAAA;;AAG5D,GAAM,cAAc;;;ACpIpB,IAAM,KAAW,sBAEJ,MAAY,EACvB,YAAS,MACT,cAAW,WACX,eAAY,IACZ,GAAG,QACgB;AACnB,SAAgB;AACd,MAAI,OAAO,WAAa,KAAa;GACnC,IAAI,IAAQ,SAAS,eAAe,GAAS;AAC7C,GAAK,MACH,IAAQ,SAAS,cAAc,QAAQ,EACvC,EAAM,KAAK,IACX,SAAS,KAAK,YAAY,EAAM;GAElC,IAAM,EAAE,gBAAa;AAErB,KAAM,cAAc;;;;;;;;;;2BAUC,EAAS,OAAO;0BACjB,EAAS,OAAO,QAAQ;0BACxB,EAAS,YAAY,QAAQ;8BACzB,EAAS,WAAW,QAAQ;;;;+BAI3B,EAAS,OAAO,MAAM;;;;;;0BAM3B,EAAS,OAAO,MAAM;0BACtB,EAAS,YAAY,MAAM;8BACvB,EAAS,WAAW,QAAQ;;;;0BAIhC,EAAS,OAAO,QAAQ;8BACpB,EAAS,WAAW,QAAQ;;;;0BAIhC,EAAS,KAAK,QAAQ;;;;0BAItB,EAAS,OAAO,QAAQ;8BACpB,EAAS,WAAW,QAAQ;;;;;;;;;8BAS5B,EAAS,KAAK,cAAc;;;;;;;;;8BAS5B,EAAS,KAAK,cAAc;;;;0BAIhC,EAAS,OAAO,MAAM;;;;;0BAKtB,EAAS,OAAO,WAAW;0BAC3B,EAAS,YAAY,MAAM;;;;;0BAK3B,EAAS,OAAO,MAAM;8BAClB,EAAS,WAAW,aAAa;;;;;;;0BAOrC,EAAS,OAAO,WAAW;8BACvB,EAAS,OAAO,WAAW;;;;;8BAK3B,EAAS,WAAW,SAAS;;;;;;0BAMjC,EAAS,KAAK,QAAQ;;8BAElB,EAAS,KAAK,cAAc;;;;;mBAKvC,EAAS,KAAK,GAAG;oBAChB,EAAS,KAAK,GAAG;;;;;;;;;;;mBAWlB,EAAS,cAAc,GAAG,MAAM;oBAC/B,EAAS,cAAc,GAAG,OAAO;;;;mBAIlC,EAAS,KAAK,GAAG;oBAChB,EAAS,KAAK,GAAG;;;;;;;;;;;mBAWlB,EAAS,cAAc,GAAG,MAAM;oBAC/B,EAAS,cAAc,GAAG,OAAO;;;;mBAIlC,EAAS,KAAK,GAAG;oBAChB,EAAS,KAAK,GAAG;;;;;;;;;;;mBAWlB,EAAS,cAAc,GAAG,MAAM;oBAC/B,EAAS,cAAc,GAAG,OAAO;;;;;mBAKlC,EAAS,KAAK,GAAG;oBAChB,EAAS,KAAK,GAAG;2BACV,EAAS,OAAO;oBACvB,EAAS,YAAY,QAAQ,WAAW,EAAS,OAAO,QAAQ;8BACtD,EAAS,WAAW,QAAQ;;;;;mBAKvC,EAAS,KAAK,GAAG;oBAChB,EAAS,KAAK,GAAG;;;;mBAIlB,EAAS,KAAK,GAAG;oBAChB,EAAS,KAAK,GAAG;;;;;0BAKX,EAAS,OAAO,MAAM;0BACtB,EAAS,YAAY,MAAM;8BACvB,EAAS,WAAW,QAAQ;;;;0BAIhC,EAAS,OAAO,QAAQ;8BACpB,EAAS,WAAW,QAAQ;;;;;;;;;;;wBAWlC,EAAS,KAAK,cAAc;;;;;;mBAMjC,EAAS,cAAc,GAAG,MAAM;oBAC/B,EAAS,cAAc,GAAG,OAAO;;;;mBAIlC,EAAS,cAAc,GAAG,MAAM;oBAC/B,EAAS,cAAc,GAAG,OAAO;;;;mBAIlC,EAAS,cAAc,GAAG,MAAM;oBAC/B,EAAS,cAAc,GAAG,OAAO;;;;IAIhD,EAAE,CAAC;CAEN,IAAM,IAAkB,gCAAgC,EAAO,sBAAsB,EAAS,GAAG,IAAY,MAAM;AAEnH,QAAO,kBAAC,GAAD;EAAa,GAAI;EAAO,WAAW;EAAmB,CAAA;;AAG/D,GAAS,cAAc,YACvB,GAAS,QAAQ,EAAY;;;AC9N7B,IAAM,KAAW;AAEjB,SAAS,KAAe;AACtB,KAAI,OAAO,WAAa,IAAa;CACrC,IAAI,IAAQ,SAAS,eAAe,GAAS;AAC7C,CAAK,MACH,IAAQ,SAAS,cAAc,QAAQ,EACvC,EAAM,KAAK,IACX,SAAS,KAAK,YAAY,EAAM;CAGlC,IAAM,IAAW,EAAiB,OAAO,QAAQ,SAC3C,IAAgB,EAAiB,OAAO,QAAQ,OAChD,IAAkB,EAAiB,OAAO,QAAQ,SAClD,IAAmB,EAAiB,OAAO,QAAQ,YACnD,IAAY,EAAiB,MAAM,KAAK,MACxC,IAAiB,EAAiB,MAAM,KAAK,QAC7C,IAAmB,EAAiB,WAAW,KAAK,OACpD,IAAoB,EAAiB,SAAS,WAAW,UACzD,IAAQ,EAAiB,SAAS,WAAW,SAC7C,IAAe,EAAiB,MAAM,YAAY,cAClD,IAAS,EAAiB,OAAO,QAAQ,MACzC,IAAU,EAAiB,OAAO,QAAQ,SAC1C,IAAe,EAAiB,OAAO,QAAQ;AAErD,GAAM,cAAc;;oBAEF,EAAU;;;;;;oBAMV,EAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBAuDT,EAAM;;;;;oBAKN,EAAe;;;;oBAIf,EAAc;;;;oBAId,EAAiB;;;;oBAIjB,EAAgB;;;;;2BAKT,EAAa;;;;;oBAKpB,EAAkB;;;;oBAIlB,EAAiB;;;;;;;;;;eAUtB,EAAO;;;;eAIP,EAAQ;;;;;eAKR,EAAa;;;;AAK5B,SAAS,GAAgB,GAAG,GAAkC;AAC5D,QAAO,EAAM,OAAO,QAAQ,CAAC,KAAK,IAAI;;AAGxC,IAAM,KAAgC;CACpC,SAAS;CACT,YAAY;CACZ,KAAK;CACN,EAEK,KAAiC;CACrC,SAAS;CACT,eAAe;CACf,KAAK;CACN,EAEK,KAA4B;CAChC,YAAY;CACZ,UAAU,EAAiB,OAAO,WAAW,MAAM;CACnD,YAAY,EAAiB,OAAO,WAAW,MAAM;CACrD,YAAY;CACZ,OAAO,EAAiB,MAAM,KAAK;CACpC,EAEK,KAAkC;CACtC,YAAY;CACZ,UAAU;CACV,YAAY;CACZ,YAAY;CACZ,OAAO,EAAiB,MAAM,KAAK;CACpC,EAEY,MAAU,EACrB,YACA,qBAAkB,SAClB,YAAS,MACT,aAAU,UACV,gBAAa,IACb,oBAAiB,IACjB,kBACA,OACA,cACA,oBACA,sBACA,GAAG,QACc;AACjB,SAAgB;AACd,MAAc;IACb,EAAE,CAAC;CAEN,IAAM,IAAc,IAAO,EACrB,IAAW,MAAO,KAAW,IAAgB,IAAc,KAAA,IAC3D,IAA0B,IAAc,KAAmB,MAAO,GAClE,IAA4B,IAAc,KAAqB,MAAO,GACtE,IAAsB,IAAiB,IAAgB,KAAA,GAEvD,IAAY,IAChB,kBAAC,OAAD;EAAK,OAAO;YAAZ,CACE,kBAAC,SAAD;GAAO,SAAS;GAAU,OAAO;aAC9B;GACK,CAAA,EACP,IAAsB,kBAAC,QAAD;GAAM,OAAO;aAAmB;GAA2B,CAAA,GAAG,KACjF;MACJ;AAEJ,QACE,kBAAC,QAAD;EAAM,OAAO;YAAb;GACG,MAAoB,SAAS,IAAY;GAC1C,kBAAC,GAAD;IACE,IAAI;IACJ,iBAAiB;IACjB,mBAAmB;IACnB,WAAW,GAAgB,aAAa,kBAAkB,KAAU,mBAAmB,KAAW,EAAU;IAC5G,GAAI;IACJ,CAAA;GACD,MAAoB,UAAU,IAAY;GACtC;;GC3OE,MAAkB,MAA4B;AACzD,KAAI,KAAU,KACZ,QAAO;AAGT,KAAI,OAAO,KAAU,SACnB,QAAO,EAAM,MAAM,CAAC,SAAS;AAG/B,KAAI,MAAM,QAAQ,EAAM,CACtB,QAAO,EAAM,SAAS;AAGxB,KAAI,OAAO,KAAU,YAAY,OAAO,KAAU,UAChD,QAAO;AAGT,KAAI,OAAO,KAAU,UAAU;EAC7B,IAAM,IAAa;AAKnB,SAJI,OAAO,EAAW,WAAY,aACzB,EAAW,SAAS,GAGtB,OAAO,KAAK,EAAiC,CAAC,SAAS;;AAGhE,QAAO;GAGI,MACX,GACA,GACA,MAEI,CAAC,KAAa,MAAe,UACxB,KAGL,MAAe,WACV,KAGF,GAAe,EAAM,ECjCxB,KAA0B;CAC9B,SAAS;CACT,YAAY;CACZ,gBAAgB;CAChB,KAAK;CACL,cAAc;CACf,EAEK,KAAkC;CACtC,SAAS;CACT,YAAY;CACZ,KAAK;CACN,EAEK,KAA4B;CAChC,UAAU,EAAiB,OAAO,WAAW,MAAM;CACnD,YAAY,EAAiB,OAAO,WAAW,MAAM;CACrD,YAAY;CACZ,YAAY;CACb,EAEK,KAAwC;CAC5C,UAAU;CACV,YAAY;CACZ,YAAY;CACZ,OAAO;CACP,SAAS;CACT,YAAY;CACZ,YAAY;CACb,EAEY,KAAc,EACzB,UACA,aACA,YACA,UACA,eAAY,IACZ,gBAAa,SACb,qBAAkB,UAClB,eACA,YACA,iBACA,aACA,eACqB;CACrB,IAAM,IAAoB,GAAO,WAAW,GACtC,IAAqB,GAAO,SAAS,GACrC,IAA0B,GAAO,cAAc,GAC/C,IAAuB,GAAO,WAAW,GACzC,IACJ,GAAgB,GAAmB,GAAyB,EAAW,IACvE,EAAQ;AAEV,QACE,kBAAC,OAAD;EAAY;YAAZ,CACE,kBAAC,OAAD;GAAK,OAAO;aAAZ,CACE,kBAAC,GAAD;IAAM,OAAM;IAAS,KAAK;cAA1B,CACE,kBAAC,SAAD;KAAgB;KAAS,OAAO;eAC7B;KACK,CAAA,EACP,IAAW,kBAAC,QAAD;KAAM,OAAO;eAAwB;KAAQ,CAAA,GAAG,KACvD;OAEP,kBAAC,OAAD;IAAK,OAAO;cAAZ,CACG,IACC,kBAAC,GAAD;KACE,MAAK;KACL,MAAK;KACL,SAAS;KACT,OAAO;MAAE,SAAS;MAAG,QAAQ;MAAQ;eAEpC;KACM,CAAA,GACP,MACH,EACG;MACF;MACL,EACG;;GC9EJ,KAA+B;CACnC,SAAS;CACT,YAAY;CACZ,gBAAgB;CAChB,KAAK;CACN,EAEK,KAA4B;CAChC,QAAQ;CACR,UAAU,EAAiB,OAAO,WAAW,MAAM;CACnD,YAAY,EAAiB,OAAO,WAAW,MAAM;CACrD,YAAY;CACZ,YAAY;CACb,EAEK,KAAwC;CAC5C,UAAU;CACV,YAAY;CACZ,YAAY;CACZ,OAAO;CACP,SAAS;CACT,YAAY;CACZ,YAAY;CACb,EAEY,MAAiB,EAC5B,UACA,aACA,gBACA,UACA,eAAY,IACZ,gBAAa,aACb,qBAAkB,UAClB,eACA,YACA,YACA,aACA,eACwB;CACxB,IAAM,IAAoB,GAAO,WAAW,GACtC,IAAqB,GAAO,SAAS,GACrC,IAA0B,GAAO,cAAc,GAC/C,IAAuB,GAAO,WAAW,GACzC,IACJ,GAAgB,GAAmB,GAAyB,EAAW,IACvE,EAAQ;AAEV,QACE,kBAAC,OAAD;EAAY;YAAZ;GACE,kBAAC,OAAD;IAAK,OAAO;cAAZ,CACE,kBAAC,GAAD;KAAM,OAAM;KAAS,KAAK;eAA1B,CACE,kBAAC,EAAW,MAAZ;MAAiB,OAAO;gBACrB;MACe,CAAA,EACjB,IAAW,kBAAC,QAAD;MAAM,OAAO;gBAAwB;MAAQ,CAAA,GAAG,KACvD;QACP,kBAAC,GAAD;KAAM,OAAM;KAAS,KAAK;eAA1B,CACG,IACC,kBAAC,GAAD;MACE,MAAK;MACL,MAAK;MACL,SAAS;MACT,OAAO;OAAE,SAAS;OAAG,QAAQ;OAAQ;gBAEpC;MACM,CAAA,GACP,MACH,EACI;OACH;;GACL,IACC,kBAAC,EAAW,WAAZ;IAAsB,MAAK;IAAY,OAAO;KAAE,WAAW;KAAG,cAAc;KAAI;cAC7E;IACoB,CAAA,GACrB;GACH;GACG;;GC1EJ,KAA6B;CACjC,SAAS;CACT,YAAY;CACZ,KAAK;CACN,EAEY,MAA2B,EACtC,eACA,kBACA,uBAAoB,iBACpB,uBAAoB,iBACpB,oBACA,4BAAyB,IACzB,4BACA,kBACA,mBACA,iBACA,OACA,WACA,UACA,aACA,GAAG,QAC+B;CAClC,IAAM,IAAc,IAAO,EACrB,IAAU,KAAM,GAChB,CAAC,GAAyB,KAA8B,GAAS,EAAuB,EACxF,IAAoB,KAAmB,GACvC,IAAkB,IAAoB,IAAoB,GAE1D,KAAyB,MAAyB;AAKtD,EAJI,KACF,EAA2B,EAAY,EAGzC,IAA0B,EAAY;IAGlC,IACJ,kBAAC,GAAD;EACE,MAAK;EACL,UAAS;EACT,cAAY;EACZ,iBAAe;EACf,gBAAc;EACd,OAAO;EACG;EACV,cAAc,MAAU,EAAM,gBAAgB;EAC9C,eAAe,EAAsB,CAAC,EAAkB;EACxD,OAAO;GAAE,eAAe;GAAG,QAAQ;GAAI,UAAU;GAAI;EACrD,MACE,kBAAC,QAAD;GAAM,eAAY;GAAO,OAAO;IAAE,SAAS;IAAe,YAAY;IAAU;aAC9E,kBAAC,GAAD;IAAM,MAAM,IAAoB,WAAW;IAAO,MAAM;IAAM,CAAA;GACzD,CAAA;EAET,CAAA;AAGJ,QACE,kBAAC,GAAD;EACE,OAAO;EACP,UAAU;EACV,SAAS;EACT,cAAc;EACd,OAAO;YAEP,kBAAC,IAAD;GACE,IAAI;GACJ,MAAM,IAAoB,SAAS;GAC5B;GACG;GACV,QAAQ,IAAS,kBAAC,QAAD;IAAM,OAAO;cAAb,CAA2B,GAAQ,EAAsB;QAAG;GAC7E,WAAW,MAAU;AAEnB,IADA,EAAW,WAAW,EAAM,EAC5B,IAAgB,EAAM,OAAO,MAAM;;GAErC,GAAI;GACJ,CAAA;EACS,CAAA;GCpFX,KAA+B;CACnC,QAAQ;CACR,SAAS;CACT,QAAQ;CACR,UAAU;CACX,EAEK,KAAiC;CACrC,YAAY;CACZ,cAAc;CACd,SAAS;CACV,EAEK,KAAkC;CACtC,UAAU;CACV,WAAW;CACX,cAAc;CACd,SAAS;CACV,EAEK,KAAwC;CAC5C,UAAU;CACV,YAAY;CACZ,YAAY;CACZ,OAAO;CACP,SAAS;CACT,YAAY;CACZ,YAAY;CACZ,YAAY;CACb,EAEY,MAA2B,EACtC,WACA,aACA,gBACA,sBACA,eAAe,GACf,aAAa,GACb,GAAG,QAGD,kBAAC,YAAD;CAAU,OAAO;EAAE,GAAG;EAAe,GAAG;EAAqB;WAA7D;EACE,kBAAC,UAAD;GAAQ,OAAO;IAAE,GAAG;IAAiB,GAAG;IAAmB;aACzD,kBAAC,QAAD,EAAA,UAAA,CACG,GACA,IACC,kBAAC,EAAW,MAAZ;IAAiB,MAAK;IAAS,OAAO;cAAwB;IAE5C,CAAA,GAChB,KACC,EAAA,CAAA;GACA,CAAA;EAER,IACC,kBAAC,OAAD;GAAK,OAAO;aAAmB;GAAkB,CAAA,GAC/C;EAEJ,kBAAC,EAAS,OAAV;GACE,GAAI;GACJ,WAAW,MAAW;AAEpB,IADA,EAAmB,WAAW,EAAO,EACrC,IAAoB,EAAO;;GAE7B,CAAA;EACO;IChET,KAA+B;CACnC,QAAQ;CACR,SAAS;CACT,QAAQ;CACR,UAAU;CACX,EAEK,KAAiC;CACrC,YAAY;CACZ,cAAc;CACd,SAAS;CACV,EAEK,KAAkC;CACtC,UAAU;CACV,WAAW;CACX,cAAc;CACd,SAAS;CACV,EAEK,KAAwC;CAC5C,UAAU;CACV,YAAY;CACZ,YAAY;CACZ,OAAO;CACP,SAAS;CACT,YAAY;CACZ,YAAY;CACZ,YAAY;CACb,EAEY,MAAwB,EACnC,WACA,aACA,gBACA,sBACA,eAAe,GACf,aAAa,GACb,GAAG,QAGD,kBAAC,YAAD;CAAU,OAAO;EAAE,GAAG;EAAe,GAAG;EAAqB;WAA7D;EACE,kBAAC,UAAD;GAAQ,OAAO;IAAE,GAAG;IAAiB,GAAG;IAAmB;aACzD,kBAAC,QAAD,EAAA,UAAA,CACG,GACA,IACC,kBAAC,EAAW,MAAZ;IAAiB,MAAK;IAAS,OAAO;cAAwB;IAE5C,CAAA,GAChB,KACC,EAAA,CAAA;GACA,CAAA;EAER,IACC,kBAAC,OAAD;GAAK,OAAO;aAAmB;GAAkB,CAAA,GAC/C;EAEJ,kBAAC,EAAM,OAAP;GACE,GAAI;GACJ,WAAW,MAAM;AAEf,IADA,EAAgB,WAAW,EAAE,EAC7B,IAAoB,EAAE,OAAO,MAAM;;GAErC,CAAA;EACO;IChET,KAAoC;CACxC,SAAS;CACT,YAAY;CACZ,KAAK;CACN,EAEK,KAAmC;CACvC,SAAS;CACT,eAAe;CACf,KAAK;CACN,EAEK,KAA4B,EAChC,YAAY,KACb,EAEK,KAAkC;CACtC,UAAU;CACV,SAAS;CACV,EAEK,KAAwC;CAC5C,UAAU;CACV,YAAY;CACZ,YAAY;CACZ,OAAO;CACP,SAAS;CACT,YAAY;CACZ,YAAY;CACZ,YAAY;CACb,EAEY,MAAoB,EAC/B,UACA,gBACA,aACA,aACA,gBAAgB,GAChB,OACA,GAAG,QACwB;CAC3B,IAAM,IAAc,IAAO,EACrB,IAAW,KAAM;AAEvB,QACE,kBAAC,OAAD;EAAK,OAAO;GAAE,GAAG;GAAoB,GAAG;GAAsB;YAA9D,CACE,kBAAC,GAAD;GACE,IAAI;GACJ,GAAI;GACJ,WAAW,MAAY;AAErB,IADA,EAAY,WAAW,EAAQ,EAC/B,IAAW,EAAQ;;GAErB,cAAY,OAAO,KAAU,WAAW,IAAQ,KAAA;GAChD,oBAAkB,IAAc,GAAG,EAAS,gBAAgB,KAAA;GAC5D,CAAA,EACF,kBAAC,OAAD;GAAK,OAAO;aAAZ,CACE,kBAAC,SAAD;IAAO,SAAS;IAAU,OAAO;cAAjC,CACG,GACA,IACC,kBAAC,EAAW,MAAZ;KAAiB,MAAK;KAAS,OAAO;eAAwB;KAE5C,CAAA,GAChB,KACE;OACP,IACC,kBAAC,OAAD;IAAK,IAAI,GAAG,EAAS;IAAe,OAAO;cACxC;IACG,CAAA,GACJ,KACA;KACF;;GC/DJ,KAAgC;CACpC,SAAS;CACT,eAAe;CACf,KAAK;CACN,EAEK,KAA4B;CAChC,YAAY;CACZ,SAAS;CACT,YAAY;CACZ,KAAK;CACN,EAEK,KAAkC;CACtC,UAAU;CACV,SAAS;CACV,EAEK,KAAwC;CAC5C,UAAU;CACV,YAAY;CACZ,YAAY;CACZ,OAAO;CACP,SAAS;CACT,YAAY;CACZ,YAAY;CACb,EAEY,MAAoB,EAC/B,eACA,aACA,gBACA,kBACA,gBAAgB,GAChB,UAAU,GACV,GAAG,QACwB;AAC3B,SAAgB;AACd,MAAoB;IACnB,EAAE,CAAC;CAEN,IAAM,IAAc,IAAO,EACrB,IAAW,KAAc,GAEzB,EACJ,WAAW,GACX,gBAAgB,GAChB,YAAY,GACZ,GAAG,MACD,GAEE,IAAwB,GAAgB,GAAiB,EAAkB,EAC3E,IAAuB,GAC3B,GACC,GAA4B,OAAO,MACpC,EACD,EAEK,IAAmB;EACvB,GAAI,KAAsB,EAAE;EAC5B,OAAO;GACL,GAAK,GAA4B,SAAS,EAAE;GAC5C,MAAM;GACP;EACF;AAED,QACE,kBAAC,OAAD;EAAK,OAAO;GAAE,GAAG;GAAgB,GAAG;GAAsB;YAA1D;GACE,kBAAC,SAAD;IAAO,SAAS;IAAU,OAAO;cAAjC,CACG,GACA,IAAW,kBAAC,QAAD;KAAM,OAAO;eAAwB;KAAQ,CAAA,GAAG,KACtD;;GAEP,IACC,kBAAC,OAAD;IAAK,IAAI,GAAG,EAAS;IAAe,OAAO;cACxC;IACG,CAAA,GACJ;GAEJ,kBAAC,GAAD;IACE,IAAI;IACJ,GAAI;IACJ,WAAW;IACX,YAAY;IACZ,WAAW,MAAU;AAEnB,KADA,EAAoB,WAAW,EAAM,EACrC,IAAgB,KAAS,KAAK;;IAEhC,oBAAkB,IAAc,GAAG,EAAS,gBAAgB,KAAA;IAC5D,CAAA;GACE;;GCzFJ,KAAgC;CACpC,SAAS;CACT,eAAe;CACf,KAAK;CACN,EAEK,KAA4B;CAChC,YAAY;CACZ,SAAS;CACT,YAAY;CACZ,KAAK;CACN,EAEK,KAAkC;CACtC,UAAU;CACV,SAAS;CACV,EAEK,KAA4B;CAChC,UAAU;CACV,OAAO;CACR,EAEK,KAAwC;CAC5C,UAAU;CACV,YAAY;CACZ,YAAY;CACZ,OAAO;CACP,SAAS;CACT,YAAY;CACZ,YAAY;CACb,EAEY,MAAwB,EACnC,eACA,aACA,gBACA,iBACA,kBACA,gBAAgB,GAChB,cAAc,GACd,GAAG,QAC4B;AAC/B,SAAgB;AACd,MAAwB;IACvB,EAAE,CAAC;CAEN,IAAM,IAAc,IAAO,EACrB,IAAe,KAAc,GAC7B,IAAgB,GAAG,EAAa,eAChC,IAAU,GAAG,EAAa,SAE1B,IAAkB,CACtB,IAAc,IAAgB,MAC9B,IAAe,IAAU,KAC1B,CACE,OAAO,QAAQ,CACf,KAAK,IAAI,EAEN,EACJ,WAAW,GACX,gBAAgB,GAChB,YAAY,GACZ,GAAG,MACD,GAEE,IAAkB,GAAsB,GAAiB,EAAkB,EAC3E,IAA2B,GAC/B,GACC,GAA4B,OAAO,MACpC,EACD,EAEK,IAAmB;EACvB,GAAI,KAAsB,EAAE;EAC5B,OAAO;GACL,GAAK,GAA4B,SAAS,EAAE;GAC5C,MAAM;GACP;EACF;AAED,QACE,kBAAC,OAAD;EAAK,OAAO;GAAE,GAAG;GAAgB,GAAG;GAAsB;YAA1D;GACE,kBAAC,SAAD;IAAO,SAAS;IAAc,OAAO;cAArC,CACG,GACA,IAAW,kBAAC,QAAD;KAAM,OAAO;eAAwB;KAAQ,CAAA,GAAG,KACtD;;GAEP,IACC,kBAAC,OAAD;IAAK,IAAI;IAAe,OAAO;cAC5B;IACG,CAAA,GACJ;GAEJ,kBAAC,GAAD;IACE,IAAI;IACJ,GAAI;IACJ,WAAW;IACX,gBAAgB;IAChB,YAAY;IACZ,QAAQ,EAAoB,UAAA;IAC5B,aAAa,EAAoB,eAAA;IACjC,WAAW,GAAM,MAAe;AAE9B,KADA,EAAoB,WAAW,GAAM,EAAW,EAChD,IAAgB,EAAK;;IAEvB,QAAQ,IAAe,UAAU,KAAA;IACjC,oBAAkB,KAAmB,KAAA;IACrC,gBAAc,EAAQ;IACtB,CAAA;GAED,IACC,kBAAC,OAAD;IAAK,IAAI;IAAS,OAAO;IAAY,MAAK;cACvC;IACG,CAAA,GACJ;GACA;;GCnIJ,KAAuC;CAC3C,UAAU;CACV,YAAY;CACZ,eAAe;CACf,YAAY;CACZ,OAAO;CACP,YAAY;CACZ,WAAW;CACX,SAAS;CACT,YAAY;CACZ,KAAK;CACN,EAEK,KAA2B;CAC/B,YAAY;CACZ,OAAO;CACP,QAAQ;CACR,YAAY;CACZ,WAAW;CACZ,EAQY,MAAa,EACxB,YACA,gBAAgB,GAChB,UAAO,eAEF,IAKH,kBAAC,OAAD;CACE,MAAM,MAAS,cAAc,UAAU,KAAA;CACvC,aAAW,MAAS,cAAc,cAAc;CAChD,OAAO;EAAE,GAAG;EAAuB,GAAG;EAAsB;WAH9D,CAKE,kBAAC,QAAD;EAAM,OAAO;EAAW,eAAY;YAClC,kBAAC,GAAD;GAAM,MAAK;GAAgB,MAAM;GAAM,CAAA;EAClC,CAAA,EACP,kBAAC,QAAD,EAAA,UAAO,GAAe,CAAA,CAClB;KAbC,MCjCL,KAAuC;CAC3C,UAAU;CACV,YAAY;CACZ,eAAe;CACf,YAAY;CACZ,OAAO;CACP,YAAY;CACZ,WAAW;CACX,SAAS;CACT,YAAY;CACZ,KAAK;CACN,EAEK,KAA2B;CAC/B,YAAY;CACZ,OAAO;CACP,QAAQ;CACR,YAAY;CACZ,WAAW;CACX,OAAO;CACR,EAKY,MAAe,EAC1B,YACA,gBAAgB,GAChB,UAAO,eAEF,IAKH,kBAAC,OAAD;CACE,MAAM,MAAS,cAAc,WAAW,KAAA;CACxC,aAAW,MAAS,cAAc,cAAc;CAChD,OAAO;EAAE,GAAG;EAAuB,GAAG;EAAsB;WAH9D,CAKE,kBAAC,QAAD;EAAM,OAAO;EAAW,eAAY;YAClC,kBAAC,GAAD;GAAM,MAAK;GAAQ,MAAM;GAAM,CAAA;EAC1B,CAAA,EACP,kBAAC,QAAD,EAAA,UAAO,GAAe,CAAA,CAClB;KAbC,MC/BL,KAAuC;CAC3C,UAAU;CACV,YAAY;CACZ,eAAe;CACf,YAAY;CACZ,OAAO;CACP,YAAY;CACZ,WAAW;CACX,SAAS;CACT,YAAY;CACZ,KAAK;CACN,EAEK,KAA2B;CAC/B,YAAY;CACZ,OAAO;CACP,QAAQ;CACR,YAAY;CACZ,WAAW;CACX,OAAO;CACR,EAKY,MAAe,EAC1B,YACA,gBAAgB,GAChB,UAAO,eAEF,IAKH,kBAAC,OAAD;CACE,MAAM,MAAS,cAAc,WAAW,KAAA;CACxC,aAAW,MAAS,cAAc,cAAc;CAChD,OAAO;EAAE,GAAG;EAAuB,GAAG;EAAsB;WAH9D,CAKE,kBAAC,QAAD;EAAM,OAAO;EAAW,eAAY;YAClC,kBAAC,GAAD;GAAM,MAAK;GAAgB,MAAM;GAAM,CAAA;EAClC,CAAA,EACP,kBAAC,QAAD,EAAA,UAAO,GAAe,CAAA,CAClB;KAbC,MClBE,MAAwB,OAC5B;CACL;CACA,WAAW,MAAe;AACxB,OAAK,IAAM,KAAQ,GAAO;GACxB,IAAI,IAAU;AAEd,WAAQ,EAAK,MAAb;IACE,KAAK;AACH,SAAU,KAAiC,QAAQ,MAAU;AAC7D;IAEF,KAAK;AAEH,SAAU,CAAC,KAAS,6BAAW,KAAK,EAAM;AAC1C;IAGF,KAAK;AACH,SACE,CAAC,KAAU,OAAO,KAAU,YAAY,EAAM,WAAW,EAAK,aAAa;AAC7E;IAEF,KAAK;AACH,SACE,CAAC,KAAU,OAAO,KAAU,YAAY,EAAM,WAAW,EAAK,aAAa;AAC7E;IAEF,KAAK;AACH,SAAU,CAAC,MAAU,EAAK,SAAS,KAAK,EAAM,IAAI;AAClD;IAEF,KAAK;AACH,SAAU,EAAK,WAAW,EAAM,IAAI;AACpC;IAEF,QACE,KAAU;;AAGd,OAAI,CAAC,EACH,QAAO;IACL,SAAS;IACT,OAAO,EAAK;IACb;;AAIL,SAAO,EAAE,SAAS,IAAM;;CAE3B,GAMU,KAAkB;CAC7B,WAAW,IAAU,8BAA8C;EACjE,MAAM;EACN;EACD;CAED,QAAQ,IAAU,0CAA0D;EAC1E,MAAM;EACN;EACD;CAED,YAAY,GAAmB,OAAsC;EACnE,MAAM;EACN,SAAS,KAAW,oBAAoB,EAAU;EAClD;EACD;CAED,YAAY,GAAmB,OAAsC;EACnE,MAAM;EACN,SAAS,KAAW,mBAAmB,EAAU;EACjD;EACD;CAED,UAAU,GAAiB,OAAqC;EAC9D,MAAM;EACN;EACA;EACD;CAED,SAAS,GAAmC,OAAqC;EAC/E,MAAM;EACN;EACA;EACD;CACF,EC5FY,MAAkB,EAC7B,eACA,kBACA,UACA,eAAY,IACZ,eACA,qBAAkB,UAClB,YACA,kBACA,UACA,mBACA,iBACA,OACA,GAAG,QACsB;CACzB,IAAM,IAAc,GAAO,WAAW;AAOtC,QACE,kBAAC,GAAD;EACE,OAAO;EACP,UAAU;EACV,SAAS;EACT,OAAO;GACL,SAAS,GAAO,WAAW;GAC3B,OAAO,GAAO,SAAS;GACvB,YAAY,GAAO,cAAc;GACjC,eAdoB;AAExB,IADA,KAAe,EACf,IAAgB,GAAG;;GAahB;EACD,YAAY;EACZ,cAAc;EACd,OAAO;YAEP,kBAAC,IAAD;GACM;GACG;GACP,WAAW,MAAU;AAEnB,IADA,EAAW,WAAW,EAAM,EAC5B,IAAgB,EAAM,OAAO,MAAM;;GAErC,GAAI;GACJ,CAAA;EACS,CAAA;GCtCJ,MAAmB,EAC9B,eACA,kBACA,UACA,eAAY,IACZ,eACA,qBAAkB,UAClB,YACA,kBACA,iBACA,UACA,mBACA,iBACA,OACA,GAAG,QACuB;AAC1B,SAAgB;AACd,MAAoB;IACnB,EAAE,CAAC;CAEN,IAAM,EACJ,WAAW,GACX,gBAAgB,GAChB,YAAY,GACZ,GAAG,MACD,GAEE,IAAa,MAAiB,KAAA,IAAY,KAAA,IAAY,GACtD,IAAc,GAAO,WAAW,GAChC,IAAwB,GAAgB,GAAiB,EAAkB,EAC3E,IAAuB,GAC3B,GACC,GAA4B,OAAO,MACpC,EACD,EACK,IAAmB;EACvB,GAAI,KAAsB,EAAE;EAC5B,OAAO;GACL,GAAK,GAA4B,SAAS,EAAE;GAC5C,MAAM;GACP;EACF;AAQD,QACE,kBAAC,GAAD;EACE,OAAO;EACP,UAAU;EACV,SAAS;EACT,OAAO;GACL,SAAS,GAAO,WAAW;GAC3B,OAAO,GAAO,SAAS;GACvB,YAAY,GAAO,cAAc;GACjC,eAfoB;AAGxB,IAFA,KAAe,EACf,IAAgB,EAAW,EAC3B,EAAoB,WAAW,GAAY,KAAA,EAAmB;;GAa3D;EACD,YAAY;EACZ,cAAc;EACd,OAAO;YAEP,kBAAC,GAAD;GACM;GACG;GACP,WAAW;GACX,YAAY;GACZ,WAAW,GAAW,MAAW;AAE/B,IADA,EAAoB,WAAW,GAAW,EAAO,EACjD,IAAgB,EAAU;;GAE5B,OAAO;IAAE,OAAO;IAAQ,GAAG,EAAoB;IAAO;GACtD,GAAI;GACJ,CAAA;EACS,CAAA;GC3EJ,MAAuB,EAClC,eACA,kBACA,UACA,eAAY,IACZ,eACA,qBAAkB,UAClB,YACA,kBACA,UACA,mBACA,iBACA,OACA,GAAG,QAC2B;AAC9B,SAAgB;AACd,MAAwB;IACvB,EAAE,CAAC;CAEN,IAAM,IAAc,GAAO,WAAW,GAEhC,UAAoB;AAGxB,EAFA,KAAe,EACf,IAAgB,KAAK,EACrB,EAAY,WAAW,MAAM,GAAG;IAG5B,EACJ,WAAW,GACX,gBAAgB,GAChB,YAAY,GACZ,GAAG,MACD,GAEE,IAAkB,GAAsB,GAAiB,EAAkB,EAC3E,IAA2B,GAC/B,GACC,GAA4B,OAAO,MACpC,EACD,EAEK,IAAmB;EACvB,GAAI,KAAsB,EAAE;EAC5B,OAAO;GACL,GAAK,GAA4B,SAAS,EAAE;GAC5C,MAAM;GACP;EACF;AAED,QACE,kBAAC,GAAD;EACE,OAAO;EACP,UAAU;EACV,SAAS;EACT,OAAO;GACL,SAAS,GAAO,WAAW;GAC3B,OAAO,GAAO,SAAS;GACvB,YAAY,GAAO,cAAc;GACjC,SAAS;GACV;EACD,YAAY;EACZ,cAAc;EACd,OAAO;YAEP,kBAAC,GAAD;GACM;GACG;GACP,WAAW,GAAU,MAAe;AAElC,IADA,EAAoB,WAAW,GAAU,EAAW,EACpD,IAAgB,EAAS;;GAE3B,WAAW;GACX,gBAAgB;GAChB,YAAY;GACZ,QAAQ,EAAoB,UAAA;GAC5B,aAAa,EAAoB,eAAA;GACjC,OAAO;IAAE,OAAO;IAAQ,GAAG,EAAoB;IAAO;GACtD,GAAI;GACJ,CAAA;EACS,CAAA;GCvFJ,MAAwB,EACnC,eACA,kBACA,UACA,eAAY,IACZ,eACA,qBAAkB,UAClB,YACA,kBACA,iBACA,UACA,mBACA,iBACA,OACA,GAAG,QAC4B;CAC/B,IAAM,IAAc,GAAO,WAAW,GAChC,IAAa,MAAiB,KAAA,IAAY,OAAO;AAQvD,QACE,kBAAC,GAAD;EACE,OAAO;EACP,UAAU;EACV,SAAS;EACT,OAAO;GACL,SAAS,GAAO,WAAW;GAC3B,OAAO,GAAO,SAAS;GACvB,YAAY,GAAO,cAAc;GACjC,eAfoB;AAGxB,IAFA,KAAe,EACf,IAAgB,EAAW,EAC3B,EAAY,WAAW,EAAW;;GAa/B;EACD,YAAY;EACZ,cAAc;EACd,OAAO;YAEP,kBAAC,GAAD;GACM;GACG;GACP,WAAW,MAAc;AAEvB,IADA,EAAY,WAAW,EAAU,EACjC,IAAgB,EAAU;;GAE5B,OAAO;IAAE,OAAO;IAAQ,GAAG,EAAY;IAAO;GAC9C,GAAI;GACJ,CAAA;EACS,CAAA;GChDJ,MAAuB,EAClC,eACA,kBACA,UACA,eAAY,IACZ,eACA,qBAAkB,UAClB,YACA,kBACA,UACA,mBACA,iBACA,OACA,aACA,GAAG,QAC2B;CAC9B,IAAM,IAAc,GAAO,WAAW;AAQtC,QACE,kBAAC,GAAD;EACE,OAAO;EACP,UAAU;EACV,SAAS;EACT,OAAO;GACL,SAAS,GAAO,WAAW;GAC3B,OAAO,GAAO,SAAS;GACvB,YAAY,GAAO,cAAc;GACjC,eAfoB;AAGxB,IAFA,KAAe,EACf,IAAgB,KAAK,EACrB,EAAU,WAAW,MAAM,GAAG;;GAa3B;EACD,YAAY;EACZ,cAAc;EACd,OAAO;YAEP,kBAAC,IAAD;GACM;GACG;GACP,WAAW,GAAU,MAAe;AAElC,IADA,EAAU,WAAW,GAAU,EAAW,EAC1C,IAAgB,EAAS;;GAEjB;GACV,OAAO;IAAE,OAAO;IAAQ,GAAG,EAAU;IAAO;GAC5C,GAAI;GACJ,CAAA;EACS,CAAA;GCpDJ,MAAuB,EAClC,eACA,kBACA,UACA,eAAY,IACZ,eACA,qBAAkB,UAClB,YACA,kBACA,iBACA,UACA,mBACA,iBACA,OACA,GAAG,QAC2B;CAC9B,IAAM,IAAc,GAAO,WAAW,GAChC,IAAa,MAAiB,KAAA,IAAY,KAAA,IAAY;AAQ5D,QACE,kBAAC,GAAD;EACE,OAAO;EACP,UAAU;EACV,SAAS;EACT,OAAO;GACL,SAAS,GAAO,WAAW;GAC3B,OAAO,GAAO,SAAS;GACvB,YAAY,GAAO,cAAc;GACjC,eAfoB;AAGxB,IAFA,KAAe,EACf,IAAgB,EAAW,EAC3B,EAAU,WAAW,GAAY,MAAe,KAAc;;GAa3D;EACD,YAAY;EACZ,cAAc;EACd,OAAO;YAEP,kBAAC,IAAD;GACM;GACG;GACP,WAAW,GAAW,GAAO,MAAU;AAErC,IADA,EAAU,WAAW,GAAW,GAAO,EAAM,EAC7C,IAAgB,EAAU;;GAE5B,OAAO;IAAE,OAAO;IAAQ,GAAG,EAAU;IAAO;GAC5C,GAAI;GACJ,CAAA;EACS,CAAA;GChEX,KAAW,sBACX,IAAoB,eAEpB,WAA4B,GAAc,mBAAmB,EAAE,MAAM,IAAI,CAAC,EAEnE,MAAY,EAAE,eAAY,GAAG,QAA2B;AACnE,SAAgB;AACd,MAAI,OAAO,WAAa,OAAe,CAAC,SAAS,eAAe,GAAS,EAAE;GACzE,IAAM,IAAQ,SAAS,cAAc,QAAQ;AAgC7C,GA/BA,EAAM,KAAK,IACX,EAAM,cAAc;WACf,EAAkB;WAClB,EAAkB;WAClB,EAAkB;WAClB,EAAkB;;;;;;;;WAQlB,EAAkB;WAClB,EAAkB;WAClB,EAAkB;WAClB,EAAkB;WAClB,EAAkB;WAClB,EAAkB;WAClB,EAAkB;WAClB,EAAkB;WAClB,EAAkB;WAClB,EAAkB;WAClB,EAAkB;WAClB,EAAkB;;;;;;SAOvB,SAAS,KAAK,YAAY,EAAM;;IAEjC,EAAE,CAAC;CAEN,IAAM,IAAqB,SACrB,MAAe,KAAA,IAIZ,kBAAC,IAAD,EAAuB,CAAA,GAHrB,GAIR,CAAC,EAAW,CAAC,EAEV,IAAkB,CAAC,GAAmB,EAAM,UAAU,CAAC,OAAO,QAAQ,CAAC,KAAK,IAAI;AAEtF,QAAO,kBAAC,GAAD;EAAa,GAAI;EAAO,WAAW;EAAiB,YAAY;EAAsB,CAAA;;AAG/F,GAAS,cAAc;;;AC3CvB,IAAa,MAAqB,EAChC,eACA,kBACA,UACA,eAAY,IACZ,eACA,qBAAkB,UAClB,YACA,kBACA,iBACA,UACA,mBACA,iBACA,OACA,GAAG,QACyB;CAC5B,IAAM,IAAc,GAAO,WAAW,GAChC,IAAa,MAAiB,KAAA,IAAY,KAAA,IAAY;AAQ5D,QACE,kBAAC,GAAD;EACE,OAAO;EACP,UAAU;EACV,SAAS;EACT,OAAO;GACL,SAAS,GAAO,WAAW;GAC3B,OAAO,GAAO,SAAS;GACvB,YAAY,GAAO,cAAc;GACjC,eAfoB;AAGxB,IAFA,KAAe,EACf,IAAgB,EAAW,EAC3B,EAAc,WAAW,GAAqB,EAAE,CAAC;;GAa9C;EACD,YAAY;EACZ,cAAc;EACd,OAAO;YAEP,kBAAC,IAAD;GACM;GACG;GACP,WAAW,GAAW,MAAoB;AAExC,IADA,EAAc,WAAW,GAAW,EAAgB,EACpD,IAAgB,EAAU;;GAE5B,OAAO;IAAE,OAAO;IAAQ,GAAG,EAAc;IAAO;GAChD,GAAI;GACJ,CAAA;EACS,CAAA;GCrEX,KAAW,0BACJ,IAAwB,mBAE/B,KAAc,EAAS,OAAO,cAAc,wBACrC,KAA8B,IAE9B,MAA+B,GAAG,MAC7C,EAAW,OAAO,QAAQ,CAAC,KAAK,IAAI,CAAC,MAAM,EAEhC,WAAiC;AAC5C,KAAI,OAAO,WAAa,OAAe,SAAS,eAAe,GAAS,CACtE;CAGF,IAAM,IAAQ,SAAS,cAAc,QAAQ;AAgC7C,CA/BA,EAAM,KAAK,IACX,EAAM,cAAc;OACf,EAAsB;OACtB,EAAsB;OACtB,EAAsB;OACtB,EAAsB;OACtB,EAAsB;OACtB,EAAsB;OACtB,EAAsB;OACtB,EAAsB;OACtB,EAAsB;OACtB,EAAsB;OACtB,EAAsB;OACtB,EAAsB;OACtB,EAAsB;qBACR,GAAY;;;OAG1B,EAAsB;OACtB,EAAsB;OACtB,EAAsB;OACtB,EAAsB;OACtB,EAAsB;OACtB,EAAsB;OACtB,EAAsB;OACtB,EAAsB;OACtB,EAAsB;;;KAK3B,SAAS,KAAK,YAAY,EAAM;GCpCrB,MAAgB,EAAE,cAAW,UAAO,GAAG,SAClD,QAAgB;AACd,KAA0B;GACzB,EAAE,CAAC,EAGJ,kBAAC,GAAD;CACE,GAAI;CACJ,WAAW,GAA4B,GAAuB,EAAU;CACxE,OAAO;EAAE,YAAY;EAA6B,GAAG;EAAO;CAC5D,CAAA;AAIN,GAAa,cAAc;;;ACC3B,IAAa,MAAyB,EACpC,eACA,kBACA,UACA,eAAY,IACZ,eACA,qBAAkB,UAClB,YACA,kBACA,UACA,mBACA,iBACA,OACA,WAAW,GACX,OAAO,GACP,GAAG,QAC6B;AAChC,SAAgB;AACd,MAA0B;IACzB,EAAE,CAAC;CAEN,IAAM,IAAc,GAAO,WAAW;AAQtC,QACE,kBAAC,GAAD;EACE,OAAO;EACP,UAAU;EACV,SAAS;EACT,OAAO;GACL,SAAS,GAAO,WAAW;GAC3B,OAAO,GAAO,SAAS;GACvB,YAAY,GAAO,cAAc;GACjC,eAfoB;AAGxB,IAFA,KAAe,EACf,IAAgB,GAAG,EACnB,EAAkB,WAAW,GAAG;;GAa7B;EACD,YAAY;EACZ,cAAc;EACd,OAAO;YAEP,kBAAC,GAAD;GACM;GACG;GACP,WAAW,GAA4B,GAAuB,EAAkB;GAChF,WAAW,MAAc;AAEvB,IADA,EAAkB,WAAW,EAAU,EACvC,IAAgB,EAAU;;GAE5B,OAAO;IAAE,OAAO;IAAQ,YAAY;IAA6B,GAAG;IAAe;GACnF,GAAI;GACJ,CAAA;EACS,CAAA;GC5EX,KAAoB,yBACpB,KAA6B,kCAC7B,KAA4B,iCAC5B,KAAwB,6BACxB,KAAuB,+BAEvB,KAAsB,6BACtB,KAA4B;AAElC,SAAS,KAAuB;AAK9B,KAJI,OAAO,WAAa,OAIpB,SAAS,eAAe,GAAqB,CAC/C;CAGF,IAAM,IAAQ,SAAS,cAAc,QAAQ;AA0C7C,CAzCA,EAAM,KAAK,IACX,EAAM,cAAc;OACf,GAAkB;;;;;OAKlB,GAAkB,IAAI,GAA0B;;;;;;;iBAOtC,EAAiB,MAAM,QAAQ,OAAO,EAAE,GAAG,EAAiB,MAAM,QAAQ,OAAO,EAAE;eACrF,EAAiB,MAAM,KAAK,MAAM;;mBAE9B,EAAiB,OAAO,WAAW,MAAM,SAAS;;qBAEhD,EAAiB,OAAO,WAAW,MAAM,WAAW;;;OAGlE,GAAkB,GAAG,GAA2B;;;qBAGlC,EAAiB,MAAM,KAAK,MAAM;;;OAGhD,GAAkB,IAAI,GAAsB;;;oBAG/B,EAAiB,IAAI,OAAO,IAAI,MAAM,GAAG;eAC9C,EAAiB,IAAI,OAAO,IAAI,MAAM,KAAK;uBACnC,EAAiB,IAAI,KAAK,GAAG,OAAO;qBACtC,EAAiB,OAAO,WAAW,MAAM,WAAW;yBAChD,EAAiB,OAAO,WAAW,MAAM,WAAW;;;;KAM3E,SAAS,KAAK,YAAY,EAAM;;AAQlC,SAAS,GAAkB,GAAiC;CAC1D,IAAM,IAA6B,EAAE,EACjC,IAAY;AAuBhB,QArBA,EAAM,QAAQ,KAAsB,GAAO,GAAc,GAAK,MAAW;EACvE,IAAM,IAAU,OAAO,KAAgB,GAAG,EACpC,IAAU,OAAO,KAAO,GAAG,CAAC,MAAM,EAClC,IAAe,IAAS,EAAQ;AAWtC,SATI,IAAe,KACjB,EAAS,KAAK;GAAE,MAAM,EAAM,MAAM,GAAW,EAAa;GAAE,OAAO;GAAO,CAAC,EAGzE,KACF,EAAS,KAAK;GAAE,MAAM;GAAS,OAAO;GAAM,CAAC,EAG/C,IAAY,IAAe,EAAQ,QAC5B;GACP,EAEE,IAAY,EAAM,UACpB,EAAS,KAAK;EAAE,MAAM,EAAM,MAAM,EAAU;EAAE,OAAO;EAAO,CAAC,EAGxD,EAAS,SAAS,IAAI,IAAW,CAAC;EAAE,MAAM;EAAO,OAAO;EAAO,CAAC;;AAkBzE,IAAa,MAAqB,EAChC,eACA,kBACA,UACA,eAAY,IACZ,eACA,qBAAkB,UAClB,YACA,kBACA,UACA,mBACA,iBACA,OACA,cACA,GAAG,QACyB;AAC5B,KAAsB;CAEtB,IAAM,IAAc,OAAO,KAAU,WAAW,IAAQ,IAClD,IAAiB,GAA0B,KAAK,EAAY,EAC5D,IAAkB,IAAiB,GAAkB,EAAY,GAAG,EAAE,EACtE,IAAkB;EACtB;EACA;EACA,IAAiB,KAA6B,KAAA;EAC/C,CACE,OAAO,QAAQ,CACf,KAAK,IAAI,EAEN,IAAc,GAAO,WAAW;AAQtC,QACE,kBAAC,GAAD;EACE,OAAO;EACP,UAAU;EACV,SAAS;EACT,OAAO;GACL,SAAS,GAAO,WAAW;GAC3B,OAAO,GAAO,SAAS;GACvB,YAAY,GAAO,cAAc;GACjC,eAfoB;AAGxB,IAFA,KAAe,EACf,IAAgB,GAAG,EACnB,EAAc,WAAW,GAAG;;GAazB;EACD,YAAY;EACZ,cAAc;EACd,OAAO;YAEP,kBAAC,OAAD;GAAK,WAAW;aAAhB,CACG,IACC,kBAAC,OAAD;IAAK,eAAY;IAAO,WAAW;cAChC,EAAgB,KAAK,GAAS,MAC7B,EAAQ,QACN,kBAAC,QAAD;KAAM,WAAW;eACd,EAAQ;KACJ,EAFsC,GAAG,EAAM,GAAG,EAAQ,OAE1D,GAEP,kBAAC,QAAD,EAAA,UAAwC,EAAQ,MAAY,EAAjD,GAAG,EAAM,GAAG,EAAQ,OAA6B,CAE/D;IACG,CAAA,GACJ,MACJ,kBAAC,GAAD;IACM;IACO;IACJ;IACP,WAAW,MAAc;AAEvB,KADA,EAAc,WAAW,EAAU,EACnC,IAAgB,EAAU;;IAE5B,OAAO;KAAE,OAAO;KAAQ,GAAG,EAAc;KAAO;IAChD,GAAI;IACJ,CAAA,CACE;;EACK,CAAA;GC/KJ,MAAqB,EAChC,eACA,kBACA,UACA,eAAY,IACZ,eACA,qBAAkB,UAClB,YACA,kBACA,YACA,aACA,mBACA,iBACA,OACA,GAAG,QACyB;CAC5B,IAAM,IAAc,GAAO,WAAW;AAOtC,QACE,kBAAC,GAAD;EACE,OAAO;EACP,UAAU;EACV,SAAS;EACT,OAAO;GACL,SAAS,GAAO,WAAW;GAC3B,OAAO,GAAO,SAAS;GACvB,YAAY,GAAO,cAAc;GACjC,eAdoB;AAExB,IADA,KAAe,EACf,IAAgB,GAAM;;GAanB;EACD,YAAY;EACZ,cAAc;EACd,OAAO;YAEP,kBAAC,IAAD;GACM;GACK;GACT,WAAW,MAAU;AAEnB,IADA,EAAc,WAAW,EAAM,EAC/B,IAAgB,EAAM,OAAO,QAAQ;;GAEvC,GAAI;GAEH;GACQ,CAAA;EACA,CAAA;GCjDJ,MAAkB,EAC7B,eACA,kBACA,UACA,eAAY,IACZ,eACA,qBAAkB,UAClB,YACA,kBACA,YACA,aACA,mBACA,iBACA,OACA,GAAG,QACsB;CACzB,IAAM,IAAc,GAAO,WAAW;AAOtC,QACE,kBAAC,GAAD;EACE,OAAO;EACP,UAAU;EACV,SAAS;EACT,OAAO;GACL,SAAS,GAAO,WAAW;GAC3B,OAAO,GAAO,SAAS;GACvB,YAAY,GAAO,cAAc;GACjC,eAdoB;AAExB,IADA,KAAe,EACf,IAAgB,GAAM;;GAanB;EACD,YAAY;EACZ,cAAc;EACd,OAAO;YAEP,kBAAC,GAAD;GACM;GACK;GACT,WAAW,MAAU;AAEnB,IADA,EAAW,WAAW,EAAM,EAC5B,IAAgB,EAAM,OAAO,QAAQ;;GAEvC,GAAI;GAEH;GACK,CAAA;EACG,CAAA;GChDJ,MAAuB,EAClC,eACA,kBACA,UACA,eAAY,IACZ,eACA,qBAAkB,UAClB,YACA,kBACA,iBACA,UACA,mBACA,iBACA,GAAG,QAC2B;CAC9B,IAAM,IAAc,GAAO,WAAW;AAOtC,QACE,kBAAC,GAAD;EACE,OAAO;EACP,UAAU;EACV,OAAO;GACL,SAAS,GAAO,WAAW;GAC3B,OAAO,GAAO,SAAS;GACvB,YAAY,GAAO,cAAc;GACjC,eAboB;AAExB,IADA,KAAe,EACf,IAAgB,EAAa;;GAY1B;EACD,YAAY;EACZ,cAAc;EACd,OAAO;YAEP,kBAAC,EAAM,OAAP;GACS;GACP,WAAW,MAAU;AAEnB,IADA,EAAW,WAAW,EAAM,EAC5B,IAAgB,EAAM,OAAO,MAAM;;GAErC,GAAI;GACJ,CAAA;EACS,CAAA;GC5CJ,MAAmB,EAC9B,eACA,kBACA,UACA,eAAY,IACZ,eACA,qBAAkB,UAClB,YACA,kBACA,kBAAe,IACf,YACA,mBACA,iBACA,OACA,GAAG,QACuB;CAC1B,IAAM,IAAc,GAAO,WAAW;AAOtC,QACE,kBAAC,GAAD;EACE,OAAO;EACP,UAAU;EACV,SAAS;EACT,OAAO;GACL,SAAS,GAAO,WAAW;GAC3B,OAAO,GAAO,SAAS;GACvB,YAAY,GAAO,cAAc;GACjC,eAdoB;AAExB,IADA,KAAe,EACf,IAAgB,EAAa;;GAa1B;EACD,YAAY;EACZ,cAAc;EACd,OAAO;YAEP,kBAAC,GAAD;GACM;GACK;GACT,WAAW,GAAa,MAAU;AAEhC,IADA,EAAY,WAAW,GAAa,EAAM,EAC1C,IAAgB,EAAY;;GAE9B,GAAI;GACJ,CAAA;EACS,CAAA;GC9CJ,MAAmB,EAC9B,eACA,kBACA,UACA,eAAY,IACZ,eACA,qBAAkB,UAClB,YACA,kBACA,iBACA,UACA,QACA,mBACA,iBACA,GAAG,QACuB;CAC1B,IAAM,IAAc,GAAO,WAAW,GAChC,IAAgB,KAAgB,KAAO;AAO7C,QACE,kBAAC,GAAD;EACE,OAAO;EACP,UAAU;EACV,OAAO;GACL,SAAS,GAAO,WAAW;GAC3B,OAAO,GAAO,SAAS;GACvB,YAAY,GAAO,cAAc;GACjC,eAboB;AAExB,IADA,KAAe,EACf,IAAgB,EAAc;;GAY3B;EACD,YAAY;EACZ,cAAc;EACd,OAAO;YAEP,kBAAC,IAAD;GACS;GACF;GACL,WAAW,MAAc;AAEvB,IADA,EAAY,WAAW,EAAU,EACjC,IAAgB,EAAU;;GAE5B,GAAI;GACJ,CAAA;EACS,CAAA;GChDJ,MAAiB,EAC5B,eACA,kBACA,UACA,eAAY,IACZ,eACA,qBAAkB,UAClB,YACA,kBACA,kBAAe,GACf,UACA,mBACA,iBACA,GAAG,QACqB;CACxB,IAAM,IAAc,GAAO,WAAW;AAOtC,QACE,kBAAC,GAAD;EACE,OAAO;EACP,UAAU;EACV,OAAO;GACL,SAAS,GAAO,WAAW;GAC3B,OAAO,GAAO,SAAS;GACvB,YAAY,GAAO,cAAc;GACjC,eAboB;AAExB,IADA,KAAe,EACf,IAAgB,EAAa;;GAY1B;EACD,YAAY;EACZ,cAAc;EACd,OAAO;YAEP,kBAAC,GAAD;GACS;GACP,WAAW,MAAc;AAEvB,IADA,EAAU,WAAW,EAAU,EAC/B,IAAgB,EAAU;;GAE5B,GAAI;GACJ,CAAA;EACS,CAAA;GC1CJ,MAAwB,EACnC,eACA,kBACA,UACA,eAAY,IACZ,eACA,qBAAkB,UAClB,YACA,kBACA,iBACA,UACA,mBACA,iBACA,GAAG,QAC4B;CAC/B,IAAM,IAAc,GAAO,WAAW;AAOtC,QACE,kBAAC,GAAD;EACE,OAAO;EACP,UAAU;EACV,OAAO;GACL,SAAS,GAAO,WAAW;GAC3B,OAAO,GAAO,SAAS;GACvB,YAAY,GAAO,cAAc;GACjC,eAboB;AAExB,IADA,KAAe,EACf,IAAgB,EAAa;;GAY1B;EACD,YAAY;EACZ,cAAc;EACd,OAAO;YAEP,kBAAC,GAAD;GACS;GACP,WAAW,MAAc;AAEvB,IADA,EAAW,WAAW,EAAU,EAChC,IAAgB,EAAU;;GAE5B,GAAI;GACJ,CAAA;EACS,CAAA;GC5CJ,MAAqB,EAChC,eACA,kBACA,UACA,eAAY,IACZ,eACA,qBAAkB,UAClB,YACA,kBACA,kBAAe,EAAE,EACjB,eACA,mBACA,iBACA,GAAG,QACyB;CAC5B,IAAM,IAAc,GAAO,WAAW;AAOtC,QACE,kBAAC,GAAD;EACE,OAAO;EACP,UAAU;EACV,OAAO;GACL,SAAS,GAAO,WAAW;GAC3B,OAAO,GAAO,SAAS;GACvB,YAAY,GAAO,cAAc;GACjC,eAboB;AAExB,IADA,KAAe,EACf,IAAgB,EAAa;;GAY1B;EACD,YAAY;EACZ,cAAc;EACd,OAAO;YAEP,kBAAC,IAAD;GACc;GACZ,WAAW,GAAgB,GAAW,MAAa;AAEjD,IADA,EAAc,WAAW,GAAgB,GAAW,EAAS,EAC7D,IAAgB,EAAe;;GAEjC,GAAI;GACJ,CAAA;EACS,CAAA;GC5CJ,MAAmB,EAC9B,eACA,kBACA,UACA,eAAY,IACZ,eACA,qBAAkB,UAClB,YACA,kBACA,kBAAe,EAAE,EACjB,aACA,aACA,mBACA,iBACA,GAAG,QACuB;CAC1B,IAAM,IAAc,GAAO,WAAW;AAOtC,QACE,kBAAC,GAAD;EACE,OAAO;EACP,UAAU;EACV,OAAO;GACL,SAAS,GAAO,WAAW;GAC3B,OAAO,GAAO,SAAS;GACvB,YAAY,GAAO,cAAc;GACjC,eAboB;AAExB,IADA,KAAe,EACf,IAAgB,EAAa;;GAY1B;EACD,YAAY;EACZ,cAAc;EACd,OAAO;YAEP,kBAAC,IAAD;GACY;GACV,WAAW,MAAS;AAElB,IADA,EAAY,WAAW,EAAK,EAC5B,IAAgB,EAAK,SAAS;;GAEhC,GAAI;GAEH;GACM,CAAA;EACE,CAAA;GC3DX,KAAW,wBACX,IAAsB,iBAEtB,WAA+B;AACnC,KAAI,OAAO,WAAa,OAAe,SAAS,eAAe,GAAS,CACtE;CAGF,IAAM,EAAE,kBAAe,GAEjB,IAAQ,SAAS,cAAc,QAAQ;AAoI7C,CAnIA,EAAM,KAAK,IACX,EAAM,cAAc;OACf,EAAoB;sCACW,EAAW,KAAK,QAAQ;oCAC1B,EAAW,KAAK,MAAM;sCACpB,EAAW,QAAQ,KAAK;yCACrB,EAAW,UAAU,MAAM;wCAC5B,EAAW,UAAU,KAAK;;qCAE7B,EAAW,WAAW,OAAO;qCAC7B,EAAW,WAAW,OAAO;;sCAE5B,EAAW,WAAW,GAAG,SAAS;wCAChC,EAAW,WAAW,GAAG,WAAW;2CACjC,EAAW,WAAW,GAAG,cAAc;;sCAE5C,EAAW,WAAW,GAAG,SAAS;wCAChC,EAAW,WAAW,GAAG,WAAW;2CACjC,EAAW,WAAW,GAAG,cAAc;;sCAE5C,EAAW,WAAW,GAAG,SAAS;wCAChC,EAAW,WAAW,GAAG,WAAW;2CACjC,EAAW,WAAW,GAAG,cAAc;;0CAExC,EAAW,UAAU,IAAI,GAAG;0CAC5B,EAAW,UAAU,IAAI,GAAG;0CAC5B,EAAW,UAAU,IAAI,GAAG;;;OAG/D,EAAoB;;;;OAIpB,EAAoB;OACpB,EAAoB;OACpB,EAAoB;OACpB,EAAoB;OACpB,EAAoB;OACpB,EAAoB;;;;;OAKpB,EAAoB;OACpB,EAAoB;OACpB,EAAoB;OACpB,EAAoB;OACpB,EAAoB;OACpB,EAAoB;;;;;;OAMpB,EAAoB;OACpB,EAAoB;OACpB,EAAoB;OACpB,EAAoB;OACpB,EAAoB;OACpB,EAAoB;;;;;;OAMpB,EAAoB;OACpB,EAAoB;OACpB,EAAoB;OACpB,EAAoB;OACpB,EAAoB;OACpB,EAAoB;;;;;;OAMpB,EAAoB;OACpB,EAAoB;OACpB,EAAoB;OACpB,EAAoB;;;;;OAKpB,EAAoB;OACpB,EAAoB;;;;;;;OAOpB,EAAoB;OACpB,EAAoB;OACpB,EAAoB;;;;;OAKpB,EAAoB;OACpB,EAAoB;OACpB,EAAoB;;;;OAIpB,EAAoB;;;;;OAKpB,EAAoB;;;;;OAKpB,EAAoB;;;;;OAKpB,EAAoB;;;;;;;;;KAWzB,SAAS,KAAK,YAAY,EAAM;GAc5B,KACJ,kBAAC,EAAW,MAAZ;CAAiB,cAAW;CAA6B,QAAA;WAAO;CAE9C,CAAA,EAGd,MAAmB,MACvB,GAA4D,EAAM,IAAI,EAAM,SAAS,KAEjF,MAAuB,MACvB,GAAgB,EAAK,MAAM,GACtB,EAAK,MAAM,MAAM,WAGnB,EAAK,OAGR,MAAsB,MACtB,GAAgB,EAAK,MAAM,GACtB,GAAa,EAAK,OAAO,EAC9B,OAAO,EACL,GAAI,EAAK,MAAM,MAAM,SAAS,EAAE,EACjC,EACF,CAAC,GAUG,kBAAC,KAAD;CAAS,MAPH,EAAK,QAAQ;CAOK,SANf,EAAK,OACjB,KAAA,KACC,MAAyC;AACxC,IAAM,gBAAgB;;WAGa,EAAK;CAAU,CAAA,EAGpD,MAA4B,MAChC,EAAM,KAAK,GAAM,MACE,EAAM,SAAS,KACE,MAAU,EAAM,SAAS,IAGlD;CACL,GAAG;CACH,MAAM,KAAA;CACN,OAAO,GAAoB,EAAK;CACjC,GAGC,EAAK,OACA,IAGL,EAAK,OACA;CACL,GAAG;CACH,OAAO,GAAoB,EAAK;CACjC,GAGI;CACL,GAAG;CACH,OAAO,GAAmB,EAAK;CAChC,CACD,EAEE,MAAc,GAAsB,OAAmB;CAC3D,KAAK,GAAG,EAAM,GAAG,OAAO,EAAK,SAAU,WAAW,EAAK,QAAQ;CAC/D,OAAO,GAAmB,EAAK;CAC/B,UAAU,EAAQ,EAAK;CACxB,GAEY,MAAc,EACzB,UACA,kBAAe,SACf,YAAS,MACT,qBAAkB,GAClB,0BAAuB,KACvB,wBAAqB,GACrB,sBAAmB,GACnB,kBACA,GAAG,QACkB;CACrB,IAAM,IAAe,GAAuB,KAAK,EAC3C,CAAC,GAAgB,KAAqB,GAAwB,KAAK;AAMzE,CAJA,QAAgB;AACd,MAAwB;IACvB,EAAE,CAAC,EAEN,QAAgB;AACd,MAAI,MAAiB,gBAAgB,OAAO,iBAAmB,IAC7D;EAGF,IAAM,IAAO,EAAa;AAC1B,MAAI,CAAC,EACH;EAGF,IAAM,IAAW,IAAI,gBAAgB,MAAY;GAC/C,IAAM,IAAY,EAAQ,IAAI,YAAY;AAC1C,GAAI,OAAO,KAAc,YACvB,EAAkB,EAAU;IAE9B;AAKF,SAHA,EAAS,QAAQ,EAAK,EACtB,EAAkB,EAAK,uBAAuB,CAAC,MAAM,QAExC,EAAS,YAAY;IACjC,CAAC,EAAa,CAAC;CAElB,IAAM,IACJ,MAAiB,eACb,EAAM,SAAS,IAAqB,KACpC,MAAmB,QACnB,IAAiB,IACjB,EAAM,SAAS,GAEf,IAAW,EAAM,SAAS,GAE1B,IAAiB,GAAyB,EAAM,EAEhD,IAAkB,WACb;EACL,IAAM,IAAa,EAAe,MAAM,GAAG,EAAmB,EACxD,IAAgB,EAAe,MAAM,EAAe,SAAS,EAAiB,EAC9E,IAAc,EAAe,MACjC,GACA,EAAe,SAAS,EACzB;AAED,MAAI,EAAY,WAAW,EACzB,QAAO;EAGT,IAAM,IAAmC,EACvC,OACE,kBAAC,GAAD;GACE,SAAS,CAAC,QAAQ;GAClB,MAAM,EACJ,OAAO,EAAY,IAAI,GAAW,EACnC;aAED,kBAAC,QAAD;IAAM,OAAO,EAAE,QAAQ,WAAW;cAAG,KAAiB;IAA4B,CAAA;GACzE,CAAA,EAEd;AAED,SAAO;GAAC,GAAG;GAAY;GAAkB,GAAG;GAAc;KACxD,GACJ,GAGE,IACJ,kBAAC,QAAD;EAAM,WAAU;EAA+B,eAAY;YACzD,kBAAC,GAAD;GAAM,MAAK;GAAc,MAHP,OAAO,SAAS,EAAiB,WAAW,UAAU,MAAM,GAAG,IAAI;GAGvC,OAAO,EAAE,OAAO,WAAW;GAAI,CAAA;EACxE,CAAA,EAGH,IAAoB,EAAgB,aAAa;AAEvD,QACE,kBAAC,OAAD;EAAK,KAAK;YACR,kBAAC,GAAD;GACE,GAAI;GACJ,OAAO;GACP,WAAW;GACX,WAAW,CAAC,GAAqB,EAAgB,UAAU,CAAC,OAAO,QAAQ,CAAC,KAAK,IAAI;GACrF,gBAAc;GACd,kBAAgB,IAAW,SAAS;GACpC,CAAA;EACE,CAAA;GC9UJ,KAAW,oBACX,KAAkB;AAExB,SAAS,GAAgB,GAAG,GAAuC;AACjE,QAAO,EAAW,OAAO,QAAQ,CAAC,KAAK,IAAI;;AAG7C,SAAS,KAAe;AAEtB,KADI,OAAO,WAAa,OACpB,SAAS,eAAe,GAAS,CAAE;CAEvC,IAAM,IAAQ,SAAS,cAAc,QAAQ;AAY7C,CAXA,EAAM,KAAK,IACX,EAAM,cAAc;OACf,GAAgB;;;;OAIhB,GAAgB;;;KAKrB,SAAS,KAAK,YAAY,EAAM;;AAGlC,IAAa,MAAU,EAAE,cAAW,GAAG,SACrC,QAAgB;AACd,KAAc;GACb,EAAE,CAAC,EAEC,kBAAC,GAAD;CAAW,GAAI;CAAO,WAAW,GAAgB,IAAiB,EAAU;CAAI,CAAA;AAGzF,GAAO,cAAc;;;ACrBrB,IAAM,KAAW;AAEjB,SAAS,KAAe;AACtB,KAAI,OAAO,WAAa,IAAa;CACrC,IAAM,EAAE,kBAAe,GACnB,IAAQ,SAAS,eAAe,GAAS;AAO7C,CANK,MACH,IAAQ,SAAS,cAAc,QAAQ,EACvC,EAAM,KAAK,IACX,SAAS,KAAK,YAAY,EAAM,GAGlC,EAAM,cAAc;;;aAGT,EAAW,QAAQ,IAAI;;;;;;aAMvB,EAAW,QAAQ,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;eA0BrB,EAAW,KAAK,QAAQ;qBAClB,EAAW,WAAW,KAAK,WAAW;mBACxC,EAAW,WAAW,KAAK,SAAS;qBAClC,EAAW,WAAW,KAAK,WAAW;;wBAEnC,EAAW,WAAW,KAAK,cAAc;;;;;;;;;;;;;;;;;;;;oBAoB7C,EAAW,QAAQ,SAAS;0BACtB,EAAW,QAAQ,aAAa;;;;eAI3C,EAAW,KAAK,OAAO;qBACjB,EAAW,WAAW,KAAK,aAAa;;;;oBAIzC,EAAW,QAAQ,QAAQ;;;;;;;;;oBAS3B,EAAW,QAAQ,SAAS;0BACtB,EAAW,QAAQ,aAAa;;;;;;;;eAQ3C,EAAW,YAAY,MAAM;gBAC5B,EAAW,YAAY,OAAO;mBAC3B,EAAW,YAAY,MAAM;kBAC9B,EAAW,YAAY,MAAM;;;;;;eAMhC,EAAW,KAAK,QAAQ;;;;;;;;;;;;eAYxB,EAAW,YAAY,MAAM;gBAC5B,EAAW,YAAY,OAAO;mBAC3B,EAAW,YAAY,MAAM;;;;;;;;;;eAUjC,EAAW,YAAY,MAAM;gBAC5B,EAAW,YAAY,OAAO;;;;;;;;;;;;;;;;;;eAkB/B,EAAW,KAAK,MAAM;;;;;eAKtB,EAAW,KAAK,SAAS;;;;;;;;;;;;uBAYjB,EAAW,OAAO,KAAK;;;;;;;;;;;;;;;eAe/B,EAAW,KAAK,QAAQ;qBAClB,EAAW,WAAW,KAAK,WAAW;mBACxC,EAAW,WAAW,KAAK,SAAS;qBAClC,EAAW,WAAW,KAAK,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aAuC9C,EAAW,QAAQ,WAAW;;qBAEtB,EAAW,QAAQ,cAAc;;;;;;;;;;;;;;;eAevC,EAAW,YAAY,WAAW;mBAC9B,EAAW,YAAY,WAAW;;0BAE3B,EAAW,KAAK,SAAS;uBAC5B,EAAW,OAAO,MAAM;mBAC5B,EAAW,WAAW,KAAK,SAAS;;;;;AA0BvD,IAAa,MAA2C,EACtD,UAAO,WACP,kBAAe,IACf,qBAAkB,IAClB,qBAAkB,IAClB,YAAS,IACT,cACA,GAAG,SAEH,QAAgB;AACd,KAAc;GACb,EAAE,CAAC,EAwBJ,kBAAC,GAAD;CACE,WAAW,iBAAiB,KAAa;CACnC;CACW;CACA;CACT;CACI,aA5BsC,GAAG,GAAM,MACzD,MAAS,SAET,kBAAC,QAAD;EAAM,WAAU;EAA2B,eAAY;YACrD,kBAAC,GAAD;GAAM,MAAK;GAAa,MAAM,EAAiB,WAAW,YAAY;GAAU,OAAO,EAAE,OAAO,WAAW;GAAI,CAAA;EAC1G,CAAA,GAIP,MAAS,SAET,kBAAC,QAAD;EAAM,WAAU;EAA2B,eAAY;YACrD,kBAAC,GAAD;GAAM,MAAK;GAAc,MAAM,EAAiB,WAAW,YAAY;GAAU,OAAO,EAAE,OAAO,WAAW;GAAI,CAAA;EAC3G,CAAA,GAIJ;CAYL,GAAI;CACJ,CAAA,GChVA,KAAW,mBAEJ,IAAiB,YAEjB,MAAwB,GAAG,MACtC,EAAW,OAAO,QAAQ,CAAC,KAAK,IAAI,CAAC,MAAM,EAEhC,WAA0B;AACrC,KAAI,OAAO,WAAa,OAAe,SAAS,eAAe,GAAS,CACtE;CAGF,IAAM,IAAQ,SAAS,cAAc,QAAQ;AAiL7C,CAhLA,EAAM,KAAK,IACX,EAAM,cAAc;OACf,EAAe;;;;;;;;;;OAUf,EAAe;;;;;;OAMf,EAAe;;;;;;OAMf,EAAe;OACf,EAAe;;;;;OAKf,EAAe;;;;;OAKf,EAAe;;;;;OAKf,EAAe;OACf,EAAe;OACf,EAAe;OACf,EAAe;;;;;OAKf,EAAe;OACf,EAAe;;;;;OAKf,EAAe;;;;;;;;OAQf,EAAe;;;;;;OAMf,EAAe;;;;OAIf,EAAe;;;;;;OAMf,EAAe;;;;;;OAMf,EAAe;;;;;;OAMf,EAAe;;;;;;;OAOf,EAAe;;;;;;;;;;;;OAYf,EAAe;;;;;;OAMf,EAAe;;;;;OAKf,EAAe;;;;;OAKf,EAAe;;;;OAIf,EAAe;;;;;;OAMf,EAAe;;;;;OAKf,EAAe;;;;OAIf,EAAe;OACf,EAAe;;;;;OAKf,EAAe;;;;;;;;;OASf,EAAe;;;;;;OAMf,EAAe;;;;OAIf,EAAe;;;;;KAOpB,SAAS,KAAK,YAAY,EAAM;GCjLrB,MAAS,EACpB,WAAW,GACX,eAAY,OACZ,GAAG,QACe;AAClB,SAAgB;AACd,MAAmB;IAClB,EAAE,CAAC;CAEN,IAAM,IAAc,MAAc,mBAC5B,IAAkB,GACtB,IAAc,IAAiB,KAAA,GAC/B,EACD,EACK,IACJ,IACI,EAAM,mBAAmB,EAAM,cAAc,aAAa,KAAA,IAAY,cACtE,EAAM;AAEZ,QAAO,kBAAC,GAAD;EAAU,GAAI;EAAO,gBAAgB;EAAwB,WAAW;EAAmB,CAAA;;AAGpG,GAAM,cAAc;;;ACjBpB,IAAM,KAAW,kBACX,KAAuB,qBACvB,KAA4B,IAE5B,KAMD;CACH,IAAI;EACF,WAAW;EACX,UAAU;EACV,YAAY;EACZ,qBAAqB;EACrB,uBAAuB;EACxB;CACD,IAAI;EACF,WAAW;EACX,UAAU;EACV,YAAY;EACZ,qBAAqB;EACrB,uBAAuB;EACxB;CACD,IAAI;EACF,WAAW;EACX,UAAU;EACV,YAAY;EACZ,qBAAqB;EACrB,uBAAuB;EACxB;CACF;AAED,SAAS,KAAe;AAEtB,KADI,OAAO,WAAa,OACpB,SAAS,eAAe,GAAS,CAAE;CAEvC,IAAM,EAAE,YAAS,GAEX,IAAQ,SAAS,cAAc,QAAQ;AA0F7C,CAzFA,EAAM,KAAK,IACX,EAAM,cAAc;;;;;;;;;;;;;;eAcP,EAAK,KAAK,SAAS;;;;;;;;;;sBAUZ,GAAqB;;;;;;;;;;;;;eAa5B,EAAK,KAAK,OAAO;;;;;;;oBAOZ,EAAK,UAAU,OAAO;;;;;;;;;;;;;;;;;;iCAkBT,EAAK,UAAU,SAAS;;;;;;;;;;;;;;;;;;;;;;;;KA0BvD,SAAS,KAAK,YAAY,EAAM;;AAGlC,SAAS,GAA2B,GAA0B;AACvD,MAEc,EAAK,iBAA8B,oBACtD,CAAW,SAAS,MAAW;EAC7B,IAAM,KAAS,EAAO,eAAe,IAAI,QAAQ,QAAQ,IAAI,CAAC,MAAM;AACpE,IAAO,aAAa,IAAsB,EAAM;GAChD;;AAGJ,IAAa,MAAQ,EACnB,YAAS,MACT,cAAW,eACX,iBAAc,IACd,cACA,UACA,cACA,GAAG,QACY;CACf,IAAM,IAAU,GAAuB,KAAK;AAE5C,SAAgB;AAGd,EAFA,IAAc,EAEd,GAA2B,EAAQ,QAAQ;EAE3C,IAAM,IAAW,IAAI,uBAAuB;AAC1C,MAA2B,EAAQ,QAAQ;IAC3C;AAUF,SARI,EAAQ,WACV,EAAS,QAAQ,EAAQ,SAAS;GAChC,SAAS;GACT,WAAW;GACX,eAAe;GAChB,CAAC,QAGS;AACX,KAAS,YAAY;;IAEtB,EAAE,CAAC;CAEN,IAAM,IAAS,GAAY,IACrB,IAAoB,KAAa;EACrC,OAAO,MAAmB,KAAK,IAAI,IAAS,KAA4B,GAAG,EAAE;EAC7E,OAAO;EACR;AAED,QACE,kBAAC,OAAD;EAAK,KAAK;YACR,kBAAC,GAAD;GACE,GAAI;GACO;GACX,UAAU;GACV,WAAW;GACX,OAAO;IACL,GAAG;IACF,oBAA+B,EAAO;IACtC,uBAAkC,EAAO;IACzC,yBAAoC,EAAO;IAC3C,2BAAsC,EAAO;IAC7C,6BAAwC,EAAO;IACjD;GACD,gBAAA;GACA,gBAAc;GACd,kBAAgB;GAChB,qBAAmB,IAAc,SAAS;GAC1C,CAAA;EACE,CAAA;GClMJ,KAAW;AAEjB,SAAS,KAAe;AACtB,KAAI,OAAO,WAAa,IAAa;CAErC,IAAM,EAAE,WAAQ,GAEZ,IAAQ,SAAS,eAAe,GAAS;AAO7C,CANK,MACH,IAAQ,SAAS,cAAc,QAAQ,EACvC,EAAM,KAAK,IACX,SAAS,KAAK,YAAY,EAAM,GAGlC,EAAM,cAAc;;;;;;;;;;;;;;;;;eAiBP,EAAI,UAAU,KAAK,GAAG;gBACrB,EAAI,UAAU,KAAK,GAAG;mBACnB,EAAI,UAAU,KAAK,GAAG;;;;eAI1B,EAAI,UAAU,KAAK,GAAG;gBACrB,EAAI,UAAU,KAAK,GAAG;mBACnB,EAAI,UAAU,KAAK,GAAG;;;;eAI1B,EAAI,UAAU,KAAK,GAAG;gBACrB,EAAI,UAAU,KAAK,GAAG;mBACnB,EAAI,UAAU,KAAK,GAAG;;;;AAKzC,SAAS,GACP,GACA,GACA,GACA,GACe;CACf,IAAM,EAAE,WAAQ,GACV,IAAU,EAAI,OAAO,GAAQ,IAC7B,IAAa,EAAI,KAAK,IACtB,IAAa,EAAW,YAExB,IAAsB;EAC1B,YAAY,EAAI,WAAW;EAC3B,eAAe,EAAI,WAAW;EAC9B,YAAY;EACZ,SAAS;EACT,YAAY;EACZ,gBAAgB;EAChB,SAAS,EAAW;EACpB,cAAc,EAAW;EACzB,UAAU,EAAW;EACrB,YAAY,EAAW;EACvB,eAAe,EAAW;EAC1B,WAAW;EACX,QAAQ;EACR,OAAO,EAAQ;EACf,iBAAiB,EAAQ,MAAM;EAChC;AAMD,SAJI,MAAY,aAAa,EAAQ,YACnC,EAAK,SAAS,GAAG,EAAI,YAAY,SAAS,EAAQ,WAG7C;EAAE,GAAG;EAAM,GAAG;EAAW;;AAiBlC,IAAa,MAAO,EAClB,cAAW,WACX,eAAY,SACZ,YAAS,MACT,OAAO,IAAY,EAAE,EACrB,WAAW,IAAgB,IAC3B,aACA,GAAG,SAEH,QAAgB;AACd,KAAc;GACb,EAAE,CAAC,EAMJ,kBAAC,GAAD;CACE,OALmB,GAAY,GAAU,GAAW,GAAQ,EAKrD;CACI,WAAA,SALY,IAAgB,IAAI,MAAkB;CAM7D,kBAAgB;CAChB,mBAAiB;CACjB,gBAAc;CACd,GAAI;CAEH;CACM,CAAA;AAIb,GAAI,cAAc,OAClB,GAAI,eAAe,EAAO;;;AC3I1B,IAAM,KAAW;AAEjB,SAAS,KAAe;AACtB,KAAI,OAAO,WAAa,IAAa;CACrC,IAAM,EAAE,eAAY,GAChB,IAAQ,SAAS,eAAe,GAAS;AAO7C,CANK,MACH,IAAQ,SAAS,cAAc,QAAQ,EACvC,EAAM,KAAK,IACX,SAAS,KAAK,YAAY,EAAM,GAGlC,EAAM,cAAc;;oBAEF,EAAQ,QAAQ,WAAW;uBACxB,EAAQ,OAAO;gBACtB,EAAQ,UAAU;eACnB,EAAQ,QAAQ,KAAK;;mBAEjB,EAAQ,MAAM,OAAO,IAAI;mBACzB,EAAQ,MAAM,OAAO,IAAI;iBAC3B,EAAQ,QAAQ,OAAO;;;;oBAIpB,EAAQ,QAAQ,WAAW;eAChC,EAAQ,MAAM,MAAM;gBACnB,EAAQ,MAAM,OAAO;;;;eAItB,EAAQ,MAAM,MAAM;gBACnB,EAAQ,MAAM,OAAO;;;;mBAIlB,EAAQ,MAAM,KAAK,IAAI;mBACvB,EAAQ,MAAM,KAAK,IAAI;iBACzB,EAAQ,QAAQ,KAAK;;;;;;eAMvB,EAAQ,QAAQ,MAAM;mBAClB,EAAQ,WAAW,MAAM,SAAS;qBAChC,EAAQ,WAAW,MAAM,WAAW;qBACpC,EAAQ,WAAW,MAAM,WAAW;;;;;eAK1C,EAAQ,QAAQ,KAAK;mBACjB,EAAQ,WAAW,KAAK,SAAS;qBAC/B,EAAQ,WAAW,KAAK,WAAW;qBACnC,EAAQ,WAAW,KAAK,WAAW;;;;;;;;;;;;;;AAexD,SAAS,GAAkB,GAAuB,GAA6B,GAAgB;AAS7F,QARI,MAAW,SAEX,kBAAC,OAAD;EAAK,WAAU;YACb,kBAAC,KAAD;GAAG,WAAU;aAAmB;GAAW,CAAA;EACvC,CAAA,GAKR,kBAAC,OAAD;EAAK,WAAU;YAAf,CACG,IAAU,kBAAC,KAAD;GAAG,WAAU;aAAoB;GAAY,CAAA,GAAG,MAC3D,kBAAC,KAAD;GAAG,WAAU;aAAmB;GAAW,CAAA,CACvC;;;AAIV,SAAS,GAAgB,GAAG,GAAkC;AAC5D,QAAO,EAAM,OAAO,QAAQ,CAAC,KAAK,IAAI;;AAGxC,IAAa,MAAW,EACtB,YAAS,UACT,YACA,WACA,UACA,UACA,UACA,WACA,eACA,qBACA,aACA,GAAG,QACe;CAClB,IAAM,EAAE,eAAY;AAEpB,SAAgB;AACd,MAAc;IACb,EAAE,CAAC;CAON,IAAM,IACJ,MAAU,KAAA,IAEN,GAAkB,GAAQ,GAJX,MAJD,MAAW,SAC3B,iBACA,qGAMkD,GADhD,GAGA,IAAiB,MAAW,SAC9B;EACA,UAAU,EAAQ,MAAM,KAAK;EAC7B,UAAU,EAAQ,MAAM,KAAK;EAC7B,SAAS,EAAQ,QAAQ;EACzB,WAAW;EACZ,GACC;EACA,UAAU,EAAQ,MAAM,OAAO;EAC/B,UAAU,EAAQ,MAAM,OAAO;EAC/B,SAAS,EAAQ,QAAQ;EAC1B;AAEH,QACE,kBAAC,IAAD;EACE,GAAI;EACJ,OAAO;EACP,OAAO,KAAS,EAAQ,QAAQ;EAChC,OAAO,KAAS;EAChB,QAAQ;GACN,GAAG;GACH,MAAM;IACJ,cAAc,EAAQ;IACtB,OAAO,EAAQ,QAAQ;IACvB,eAAe;IACf,GAAG;IACH,GAAG,GAAQ;IACZ;GACF;EACD,YAAY;GACV,GAAG;GACH,MAAM,GAAgB,sBAAsB,mBAAmB,KAAU,GAAY,MAAM,EAAiB;GAC7G;EAEA;EACU,CAAA;GCvFX,KAAW,mBAEX,MAAe,MACnB,OAAO,KAAU,YAAY,OAAO,KAAU,UAE1C,MAMA,EAAE,UAAO,gBAAa,iBAAc,gBAAa,sBAAmB;CACxE,IAAM,IAAU,EAAM,OAAwB,KAAK,EAC7C,CAAC,GAAa,KAAkB,EAAM,SAAS,GAAM,EACrD,IAAO,OAAO,EAAM,EAEpB,IAAmB,EAAM,kBAAkB;EAC/C,IAAM,IAAO,EAAQ;AACrB,MAAI,CAAC,EAAM;EACX,IAAM,IAAY,EAAK,cAAc,EAAK;AAC1C,KAAgB,MAAU,MAAS,IAAY,IAAO,EAAW;IAChE,EAAE,CAAC;AAEN,GAAM,gBAAgB;EACpB,IAAM,IAAO,EAAQ;AACrB,MAAI,CAAC,EAAM;AAEX,KAAkB;EAIlB,IAAM,IAAQ,4BAA4B;AAExC,GADA,GAAkB,EAClB,sBAAsB,EAAiB;IACvC,EACI,IAAY,OAAO,WAAW,GAAkB,IAAI,EAEpD,IAAiB,OAAO,iBAAmB,MAAc,IAAI,eAAe,EAAiB,GAAG;AAOtG,SANI,IACF,EAAe,QAAQ,EAAK,GACnB,OAAO,SAAW,OAC3B,OAAO,iBAAiB,UAAU,EAAiB,QAGxC;AAOX,GANI,IACF,EAAe,YAAY,GAClB,OAAO,SAAW,OAC3B,OAAO,oBAAoB,UAAU,EAAiB,EAExD,qBAAqB,EAAM,EAC3B,OAAO,aAAa,EAAU;;IAE/B,CAAC,GAAM,EAAiB,CAAC;CAE5B,IAAM,IACJ,kBAAC,QAAD;EACE,KAAK;EACL,WAAU;EACV,oBAAoB;EACpB,SAAS;YAER;EACI,CAAA;AAOT,QAJK,IAKH,kBAAC,IAAD;EACE,OAAO,IAAc,KAAA,IAAY;EACjC,QAAQ;EACR,SAAS;EACT,QAAQ;EACR,iBAAiB;EACjB,SAAQ;YAEP;EACS,CAAA,GAbL;;AAiBX,SAAS,GAAgB,GAA+C;AAGtE,QAFK,KAEE,EAAQ,KAAK,MAAW;EAC7B,IAAM,IAAa,EAAE,GAAG,GAAQ;AAkBhC,SAhBI,MAAM,QAAQ,EAAW,SAAS,IAAI,EAAW,SAAS,SAAS,MACrE,EAAW,WAAW,GAAgB,EAAW,SAAS,GAGxD,EAAW,UAAU,CAAC,EAAW,aACnC,EAAW,YAAY,EAAE,mBACvB,kBAAC,QAAD;GAAM,WAAU;GAAqB,eAAY;aAC/C,kBAAC,GAAD;IACE,MAAM,MAAc,WAAW,iBAAiB;IAChD,MAAM;IACN,OAAO,EAAE,OAAO,WAAW;IAC3B,CAAA;GACG,CAAA,GAIJ;GACP;;AAGJ,SAAS,GACP,GACA,GACA,GACmB;AACnB,KAAI,CAAC,KAAW,MAAS,UAAU,EAAQ,WAAW,EAAG,QAAO;CAEhE,IAAM,IAAc,MAAS,WAAW,MAAS,QAC3C,IAAa,MAAS,UAAU,MAAS,QACzC,IAAY,EAAQ,SAAS;AAEnC,QAAO,EAAQ,KAAK,GAAQ,MAAU;EACpC,IAAM,IAAa,EAAE,GAAG,GAAQ,EAE1B,IAAmB,KAAe,MAAU,GAC5C,IAAoB,KAAc,MAAU;AAgBlD,SAdI,MACF,EAAW,QAAQ,QACnB,AACE,EAAW,UAAQ,IAInB,MACF,EAAW,QAAQ,SACnB,AACE,EAAW,UAAQ,IAIhB;GACP;;AAGJ,SAAS,GACP,GACA,GACA,GACA,GACA,GACmB;AAGnB,QAFK,KAEE,EAAQ,KAAK,MAAW;EAC7B,IAAM,IAAa,EAAE,GAAG,GAAQ;AAEhC,MAAI,MAAM,QAAQ,EAAW,SAAS,IAAI,EAAW,SAAS,SAAS,EAErE,QADA,EAAW,WAAW,GAAqB,EAAW,UAAU,GAAa,GAAc,GAAa,EAAa,EAC9G;EAGT,IAAM,IAAiB,EAAW;AAwBlC,SAtBI,EAAW,YAAY,QAEhB,EAAW,aAAa,KADjC,EAAW,WAAW,EAAE,WAAW,IAAO,GAGjC,OAAO,EAAW,YAAa,aACxC,EAAW,WAAW;GAAE,GAAG,EAAW;GAAU,WAAW;GAAO,GAGpE,EAAW,UAAU,GAAgB,GAAiB,MAAkB;GACtE,IAAM,IAAW,IAAiB,EAAe,GAAO,GAAQ,EAAM,GAAG;AAUzE,UARI,GAAY,EAAS,GAChB,kBAAC,IAAD;IAAiB,OAAO;IAAuB;IAA2B;IAA2B;IAA2B;IAAgB,CAAA,GAGrJ,CAAC,KAAkB,GAAY,EAAM,GAChC,kBAAC,IAAD;IAAwB;IAAoB;IAA2B;IAA2B;IAA2B;IAAgB,CAAA,GAG/I;KAGF;GACP;;AAGJ,SAAS,GAAkB,GAAiC;AAC1D,KAAI,OAAO,GAAQ,OAAQ,SAAU,QAAO,EAAO;AACnD,KAAI,OAAO,GAAQ,aAAc,SAAU,QAAO,EAAO;AACzD,KAAI,OAAO,GAAQ,aAAc,SAAU,QAAO,OAAO,EAAO,UAAU;;AAI5E,SAAS,GAAoB,GAAiC,GAA6B;AACzF,KAAI,MAAM,QAAQ,EAAU,CAC1B,QAAO,EAAU,QAAiB,GAAK,MAAQ;AAC7C,MAAI,KAAO,OAAO,KAAQ,SACxB,QAAQ,EAAgC,OAAO,EAAI;IAGpD,EAAO;AAGZ,KAAI,OAAO,KAAc,YAAY,OAAO,KAAc,SACxD,QAAO,EAAO,OAAO,EAAU;;AAMnC,SAAS,GAAoB,GAAiC,GAAoB,GAAyC;AACzH,KAAI,MAAM,QAAQ,EAAU,IAAI,EAAU,SAAS,GAAG;EACpD,IAAM,IAAO,EAAE,GAAG,GAAQ,EACtB,IAAkC;AAEtC,OAAK,IAAI,IAAI,GAAG,IAAI,EAAU,SAAS,GAAG,KAAK,GAAG;GAChD,IAAM,IAAM,OAAO,EAAU,GAAG,EAC1B,IAAU,EAAO,IACjB,IAAS,KAAW,OAAO,KAAY,WAAW,EAAE,GAAI,GAAqC,GAAG,EAAE;AAExG,GADA,EAAO,KAAO,GACd,IAAS;;AAIX,SADA,EAAO,OAAO,EAAU,EAAU,SAAS,GAAG,IAAI,GAC3C;;AAOT,QAJI,OAAO,KAAc,YAAY,OAAO,KAAc,WACjD;EAAE,GAAG;GAAS,OAAO,EAAU,GAAG;EAAO,GAG3C;;AAGT,SAAS,GACP,GACA,GACA,GACmB;AAGnB,QAFK,KAEE,EAAQ,KAAK,MAAW;EAC7B,IAAM,IAAa,EAAE,GAAG,GAAQ;AAEhC,MAAI,MAAM,QAAQ,EAAW,SAAS,IAAI,EAAW,SAAS,SAAS,EAErE,QADA,EAAW,WAAW,GAAoB,EAAW,UAAU,GAAoB,EAAc,EAC1F;EAGT,IAAM,IAAW,GAAkB,EAAW;AA2B9C,SAxBI,EAFuB,KAAY,EAAmB,IAAI,EAAS,KAEpD,EAAW,aAAa,SAI3C,EAAW,UAAU,GAAiB,GAAiC,MAAqB;GAC1F,IAAM,IAAe,GAAoB,GAAQ,EAAW,UAAU,EAChE,IAAgB,OAAO,KAAiB;AAG9C,UACE,kBAAC,GAAD;IACE,WAAU;IACV,MAAM,IAAgB,WAAW;IACjC,MAAK;IACL,OAPe,KAAgB,OAAO,KAAK,OAAO,EAAa;IAQ/D,WAAW,MAAU;KACnB,IAAM,IAAM,EAAM,OAAO,OACnB,IAAY,IAAiB,MAAQ,KAAK,OAAO,OAAO,EAAI,GAAI;AACtE,OAAc,GAAU,EAAW,WAAW,EAAU;;IAE1D,CAAA;MAnBG;GAwBT;;AAGJ,SAAS,GACP,GACA,GACmB;AAGnB,QAFK,KAEE,EAAQ,KAAK,MAAW;EAC7B,IAAM,IAAa,EAAE,GAAG,GAAQ;AAEhC,MAAI,MAAM,QAAQ,EAAW,SAAS,IAAI,EAAW,SAAS,SAAS,EAErE,QADA,EAAW,WAAW,GAA2B,EAAW,UAAU,EAAkB,EACjF;EAGT,IAAM,IAAW,GAAkB,EAAW;AAK9C,SAJI,CAAC,KAAY,EAAkB,IAAI,EAAS,GACvC,IAGF;GACP,CAAC,QAAQ,MAAQ,MAAQ,KAAK;;AAGlC,IAAM,MAIA,EAAE,YAAS,mBAAgB,kBAAe;CAC9C,IAAM,IAAgB,EAAM,cAAc;EACxC,IAAM,IAA8C,EAAE,EAEhD,KAAY,MAAgB;AAChC,KAAK,SAAS,MAAQ;AACpB,QAAI,MAAM,QAAQ,EAAI,SAAS,IAAI,EAAI,SAAS,SAAS,EACvD,GAAS,EAAI,SAAS;SACjB;KACL,IAAM,IAAW,GAAkB,EAAI,EACjC,IAAQ,EAAI,UAAU,OAAO,EAAI,aAAc,WAAW,EAAI,YAAY;AAChF,KAAI,KACF,EAAK,KAAK;MAAE,KAAK;MAAU,OAAO,OAAO,EAAM;MAAE,CAAC;;KAGtD;;AAIJ,SADA,EAAS,EAAQ,EACV;IACN,CAAC,EAAQ,CAAC;AAEb,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf,CACE,kBAAC,SAAD;GAAO,WAAU;aAAyB;GAAgB,CAAA,EAC1D,kBAAC,OAAD;GAAK,WAAU;aACZ,EAAc,KAAK,EAAE,QAAK,eACzB,kBAAC,SAAD;IAAiB,WAAU;cAA3B,CACE,kBAAC,SAAD;KACE,MAAK;KACL,SAAS,EAAe,IAAI,EAAI;KAChC,WAAW,MAAM,EAAS,GAAK,EAAE,OAAO,QAAQ;KAChD,CAAA,EACF,kBAAC,QAAD,EAAA,UAAO,GAAa,CAAA,CACd;MAPI,EAOJ,CACR;GACE,CAAA,CACF;;;AAIV,SAAS,KAAe;AACtB,KAAI,OAAO,WAAa,IAAa;CACrC,IAAM,EAAE,UAAO,gBAAa,GAExB,IAAQ,SAAS,eAAe,GAAS;AAO7C,CANK,MACH,IAAQ,SAAS,cAAc,QAAQ,EACvC,EAAM,KAAK,IACX,SAAS,KAAK,YAAY,EAAM,GAGlC,EAAM,cAAc;;;eAGP,EAAM,KAAK,KAAK;;;;;eAKhB,EAAM,KAAK,KAAK;oBACX,EAAM,QAAQ,UAAU;;;;eAI7B,EAAM,KAAK,OAAO;qBACZ,EAAM,WAAW,OAAO,WAAW;mBACrC,EAAM,WAAW,OAAO,SAAS;qBAC/B,EAAM,WAAW,OAAO,WAAW;wBAChC,EAAM,WAAW,OAAO,cAAc;oBAC1C,EAAM,QAAQ,UAAU;uBACrB,EAAM,OAAO,mBAAmB,SAAS,EAAM,OAAO,UAAU;iBACtE,EAAM,QAAQ,OAAO,OAAO;gBAC7B,EAAM,UAAU,OAAO,OAAO;;;;;;;;;;eAU/B,EAAM,KAAK,KAAK;qBACV,EAAM,WAAW,KAAK,WAAW;mBACnC,EAAM,WAAW,KAAK,SAAS;qBAC7B,EAAM,WAAW,KAAK,WAAW;wBAC9B,EAAM,WAAW,KAAK,cAAc;iCAC3B,EAAM,OAAO,YAAY;;iBAEzC,EAAM,QAAQ,OAAO,KAAK;gBAC3B,EAAM,UAAU,OAAO,KAAK;;;;;;;oBAOxB,EAAM,QAAQ,SAAS;;;;;oBAKvB,EAAM,QAAQ,YAAY;;;;sBAIxB,EAAS,OAAO,QAAQ;0BACpB,EAAS,WAAW,QAAQ;;;;;;;;;;;oBAWlC,EAAS,KAAK,cAAc;eACjC,EAAS,cAAc,GAAG,MAAM;gBAC/B,EAAS,cAAc,GAAG,OAAO;;;;;;;eAOlC,EAAM,KAAK,OAAO;;;;;eAKlB,EAAM,KAAK,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;eA2ClB,EAAM,KAAK,YAAY;;;;;eAKvB,EAAM,KAAK,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAwCd,EAAM,WAAW,cAAc,SAAS;qBACtC,EAAM,WAAW,cAAc,WAAW;qBAC1C,EAAM,WAAW,cAAc,WAAW;wBACvC,EAAM,WAAW,cAAc,cAAc;gBACrD,EAAM,UAAU,QAAQ,OAAO;iBAC9B,EAAM,QAAQ,QAAQ,OAAO;uBACvB,EAAM,OAAO,mBAAmB,SAAS,EAAM,OAAO,UAAU;;;;mBAIpE,EAAM,WAAW,YAAY,SAAS;qBACpC,EAAM,WAAW,YAAY,WAAW;qBACxC,EAAM,WAAW,YAAY,WAAW;wBACrC,EAAM,WAAW,YAAY,cAAc;gBACnD,EAAM,UAAU,QAAQ,KAAK;oBACzB,EAAM,UAAU,QAAQ,KAAK;oBAC7B,EAAM,UAAU,QAAQ,KAAK;iBAChC,EAAM,QAAQ,QAAQ,KAAK;;;;gBAI5B,EAAM,UAAU,QAAQ,KAAK;oBACzB,EAAM,UAAU,QAAQ,KAAK;oBAC7B,EAAM,UAAU,QAAQ,KAAK;;;;;;;;;;;;;;;;;;;;;mBAqB9B,EAAM,WAAW,OAAO,SAAS;qBAC/B,EAAM,WAAW,OAAO,WAAW;wBAChC,EAAM,WAAW,OAAO,cAAc;gBAC9C,EAAM,UAAU,OAAO,OAAO;qBACzB,EAAM,WAAW,OAAO,WAAW;;;;mBAIrC,EAAM,WAAW,KAAK,SAAS;qBAC7B,EAAM,WAAW,KAAK,WAAW;wBAC9B,EAAM,WAAW,KAAK,cAAc;gBAC5C,EAAM,UAAU,OAAO,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;oBAyBxB,EAAM,QAAQ,UAAU;;;;;;;;;;oBAUxB,EAAM,QAAQ,UAAU;;;;oBAIxB,EAAM,QAAQ,UAAU;;;;;;;;;;oBAUxB,EAAM,QAAQ,UAAU;;;;oBAIxB,EAAM,QAAQ,UAAU;;;;;;;;;;oBAUxB,EAAM,QAAQ,UAAU;;;;;;;;;;;;;;;eAe7B,EAAM,KAAK,KAAK;;;;;;;;;;;;;;;eAehB,EAAM,KAAK,KAAK;;;;;;;;;;;;;;;;;;;;;;0BAsBL,EAAiB,MAAM,OAAO,QAAQ;oBAC5C,EAAiB,MAAM,WAAW,QAAQ;eAC/C,EAAiB,MAAM,KAAK,MAAM;;;;;;;;sBAQ3B,EAAiB,MAAM,OAAO,MAAM;;;;;;sBAMpC,EAAiB,MAAM,OAAO,MAAM;;;;;;oBAMtC,EAAM,QAAQ,OAAO;;;;;oBAKrB,EAAM,QAAQ,OAAO;;;;0BAIf,EAAM,OAAO,UAAU;uBAC1B,EAAM,OAAO,OAAO;;oBAEvB,EAAM,QAAQ,OAAO;;;;6BAIZ,EAAM,OAAO,mBAAmB;oBACzC,EAAM,QAAQ,cAAc;;;;;oBAK5B,EAAM,QAAQ,YAAY;;;;AAK9C,IAAa,MAAiC,EAC5C,aAAU,UACV,qBAAkB,WAClB,qBAAkB,QAClB,wBAAqB,KACrB,yBAAsB,KACtB,wBAAqB,IACrB,uBAAoB,IACpB,4BAAyB,KACzB,2BAAwB,UACxB,4BAAyB,iBACzB,uBAAoB,EAAE,EACtB,2BACA,oBAAiB,IACjB,qBACA,6BACA,UAAO,UACP,cACA,YACA,eACA,GAAG,QACC;CACJ,IAAM,CAAC,GAA6B,KAAkC,EAAM,SAAS,GAAM,EACrF,CAAC,GAAc,KAAmB,EAAM,SAC5C,MAAM,QAAQ,EAAW,GAAI,IAA2C,EAAE,CAC3E,EACK,CAAC,GAAqB,MAA0B,EAAM,eACtD,MAAM,QAAQ,EAAiB,GAC1B,IAAI,IAAI,EAAiB,IAAI,OAAO,CAAC,GAE1C,KAAW,MAAM,QAAQ,EAAQ,GAC5B,IAAI,IACT,EACG,KAAK,MAAQ,GAAkB,EAAI,CAAC,CACpC,QAAQ,MAAO,EAAQ,EAAI,CAC/B,mBAEI,IAAI,KAAK,CAChB;AAqBF,CAnBA,QAAgB;AACd,MAAc;IACb,EAAE,CAAC,EAEN,QAAgB;AACd,MAAI,OAAO,SAAW,IAAa;EAEnC,IAAM,UAAiB;AACrB,KAA+B,OAAO,cAAc,EAAmB;;AAMzE,SAHA,GAAU,EACV,OAAO,iBAAiB,UAAU,EAAS,QAE9B;AACX,UAAO,oBAAoB,UAAU,EAAS;;IAE/C,CAAC,EAAmB,CAAC,EAExB,QAAgB;AACV,QAAY,oBAChB,EAAgB,MAAM,QAAQ,EAAW,GAAI,IAA2C,EAAE,CAAC;IAC1F,CAAC,GAAY,EAAQ,CAAC;CAEzB,IAAM,EAAE,QAAQ,IAAW,aAAa,IAAgB,GAAG,MAAiB,GACtE,IAAqB,MAAoB,UAAU,GACnD,IAAqB,MAAY,kBACjC,IAAyB,MAAY,wBAAwB;AAEnE,SAAgB;AACT,OACD,MAAM,QAAQ,EAAiB,IACjC,GAAuB,IAAI,IAAI,EAAiB,IAAI,OAAO,CAAC,CAAC;IAE9D,CAAC,GAAkB,EAAuB,CAAC;CAE9C,IAAM,KAA+B,EAAM,aACxC,GAAgB,MAAqB;AACpC,MAAwB,MAAS;GAC/B,IAAM,IAAO,IAAI,IAAI,EAAK;AAC1B,GAAI,IACF,EAAK,IAAI,EAAO,GAEhB,EAAK,OAAO,EAAO;GAErB,IAAM,IAAY,MAAM,KAAK,EAAK;AAElC,UADA,IAA2B,EAAU,EAC9B;IACP;IAEJ,CAAC,EAAyB,CAC3B,EACK,KAA4B,EAAM,cAClC,MAAM,QAAQ,EAAkB,GAC3B,EAAkB,IAAI,OAAO,GAGlC,OAAO,KAAsB,WACxB,EACJ,MAAM,IAAI,CACV,KAAK,MAAU,EAAM,MAAM,CAAC,CAC5B,OAAO,QAAQ,GAGhB,KAAqB,OAAO,KAAsB,WAC7C,OAAO,QAAQ,EAAkB,CACrC,QAAQ,GAAG,OAAa,EAAQ,EAAS,CACzC,KAAK,CAAC,OAAS,EAAI,GAGjB,EAAE,EACR,CAAC,EAAkB,CAAC,EAEjB,KAA2B,EAAM,aAAa,GAAkB,GAAoB,MAAuB;AAC/G,KAAiB,MAAS;AACxB,OAAI,CAAC,MAAM,QAAQ,EAAK,IAAI,CAAC,EAAK,GAChC,QAAO;GAGT,IAAM,IAAW,CAAC,GAAG,EAAK,EACpB,IAAa,EAAS;AAG5B,UAFA,EAAS,KAAY,GAAoB,GAAY,GAAW,EAAU,EAC1E,IAAyB,EAAmD,EACrE;IACP;IACD,CAAC,EAAuB,CAAC,EAEtB,KAAwB,EAAM,cAAc;EAChD,IAAM,IAAgB,GAAgB,EAAiB,EACjD,IAAoB,IACtB,GAAoB,GAAe,GAAiB,EAAoB,GACxE,GAEE,IAAuB,IACzB,GAA2B,GAAmB,EAAoB,GAClE,GAEE,IAAqB,IAAI,IAAI,GAA0B,EACvD,IAAsB,IACxB,GAAoB,GAAsB,GAAoB,GAAyB,GACvF;AAMJ,SAJI,CAAC,KAAsB,IAClB,IAGF,GACL,GACA,GACA,GACA,GACA,EACD;IACA;EACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CAAC,EAEI,IAAkB,EAAM,cACvB,IAID,CAAC,MAAa,OAAO,MAAc,WAC9B,EAAE,GAAG,eAAwB,GAG/B;EACL,GAAG;EACH,GAAG,GAAU,KAAM;EACpB,GAVQ,IAWR,CAAC,IAAW,EAAmB,CAAC,EAE7B,KAAuB,IAAsB,MAAkB,UAAW,IAE1E,IAAc;EAClB;EACA,YAAY;EACZ,iBAAiB;EACjB,MAAoB,UAAU,0BAA0B;EACxD,KAAa;EACd,CACE,OAAO,QAAQ,CACf,KAAK,IAAI;AAEZ,QAAO,IACL,kBAAC,OAAD;EAAK,WAAW;YAAhB,CACE,kBAAC,IAAD;GACW;GACT,gBAAgB;GAChB,UAAU;GACV,CAAA,EACF,kBAAC,IAAD;GACE,GAAI;GACJ,SAAS;GACT,YAAY,IAAqB,IAAe;GAChD,QAAQ;GACR,aAAa;GACP;GACN,WAAW;GACX,CAAA,CACE;MAEN,kBAAC,IAAD;EACE,GAAI;EACJ,SAAS;EACT,YAAY,IAAqB,IAAe;EAChD,QAAQ;EACR,aAAa;EACP;EACN,WAAW;EACX,CAAA;GCnhCA,KAAW;AAEjB,SAAS,KAAe;AACtB,KAAI,OAAO,WAAa,IAAa;CAErC,IAAM,EAAE,eAAY,GAChB,IAAQ,SAAS,eAAe,GAAS;AAO7C,CANK,MACH,IAAQ,SAAS,cAAc,QAAQ,EACvC,EAAM,KAAK,IACX,SAAS,KAAK,YAAY,EAAM,GAGlC,EAAM,cAAc;;oBAEF,EAAQ,QAAQ,WAAW;uBACxB,EAAQ,OAAO;;gBAEtB,EAAQ,UAAU;eACnB,EAAQ,QAAQ,KAAK;;mBAEjB,EAAQ,MAAM,OAAO,IAAI;mBACzB,EAAQ,MAAM,OAAO,IAAI;iBAC3B,EAAQ,QAAQ,OAAO;;;;eAIzB,EAAQ,MAAM,MAAM;gBACnB,EAAQ,MAAM,OAAO;;;;;oBAKjB,EAAQ,QAAQ,WAAW;;;;mBAI5B,EAAQ,MAAM,KAAK,IAAI;mBACvB,EAAQ,MAAM,KAAK,IAAI;iBACzB,EAAQ,QAAQ,KAAK;;;;;;;eAOvB,EAAQ,QAAQ,MAAM;mBAClB,EAAQ,WAAW,MAAM,SAAS;qBAChC,EAAQ,WAAW,MAAM,WAAW;qBACpC,EAAQ,WAAW,MAAM,WAAW;;;;;;;;;eAS1C,EAAQ,QAAQ,KAAK;mBACjB,EAAQ,WAAW,KAAK,SAAS;qBAC/B,EAAQ,WAAW,KAAK,WAAW;qBACnC,EAAQ,WAAW,KAAK,WAAW;;;;;;;;;;;;;;AAexD,SAAS,GAAgB,GAAG,GAAkC;AAC5D,QAAO,EAAM,OAAO,QAAQ,CAAC,KAAK,IAAI;;AAGxC,SAAS,GAAkB,GAAuB,GAAgB;AAShE,QARI,MAAW,SAEX,kBAAC,OAAD;EAAK,WAAU;YACb,kBAAC,KAAD;GAAG,WAAU;aAAmB;GAAW,CAAA;EACvC,CAAA,GAIH,kBAAC,KAAD;EAAG,WAAU;YAAmB;EAAW,CAAA;;AAGpD,IAAa,MAAW,EACtB,YAAS,UACT,YACA,WACA,UACA,YACA,UACA,UACA,WACA,eACA,qBACA,GAAG,QACe;CAClB,IAAM,EAAE,eAAY;AAEpB,SAAgB;AACd,MAAc;IACb,EAAE,CAAC;CAON,IAAM,IACJ,MAAY,KAAA,IAAsB,GAAkB,GAFjC,MAJD,MAAW,SAC3B,iBACA,qGAIuE,GAAjD,GAEpB,IACJ,MAAU,KAAA,IAEN,MAAW,YAAY,IACrB,kBAAC,KAAD;EAAG,WAAU;YAAoB;EAAY,CAAA,GAC7C,KAAA,IAHF,GAKA,IAAiB,MAAW,SAC9B;EACA,UAAU,EAAQ,MAAM,KAAK;EAC7B,UAAU,EAAQ,MAAM,KAAK;EAC7B,SAAS,EAAQ,QAAQ;EACzB,WAAW;EACZ,GACC;EACA,UAAU,EAAQ,MAAM,OAAO;EAC/B,UAAU,EAAQ,MAAM,OAAO;EAC/B,SAAS,EAAQ,QAAQ;EAC1B;AAEH,QACE,kBAAC,GAAD;EACE,GAAI;EACJ,OAAO;EACP,SAAS;EACT,OAAO,KAAS,EAAQ,QAAQ;EAChC,OAAO,KAAS;EAChB,QAAQ;GACN,GAAG;GACH,MAAM;IACJ,cAAc,EAAQ;IACtB,OAAO,EAAQ,QAAQ;IACvB,eAAe;IACf,GAAG;IACH,GAAG,GAAQ;IACZ;GACF;EACD,YAAY;GACV,GAAG;GACH,MAAM,GAAgB,sBAAsB,mBAAmB,KAAU,GAAY,MAAM,EAAiB;GAC7G;EACD,CAAA;GC5JA,KAA6D;CACjE,IAAI;CACJ,IAAI;CACJ,IAAI;CACL,EAuBK,KAAW,yBACX,IAAoB;AAE1B,SAAS,KAAe;AACtB,KAAI,OAAO,WAAa,IAAa;CAErC,IAAM,EAAE,UAAO,UAAO,cAAW,GAC3B,IAAgB,SAAS,eAAe,GAAS,EAEjD,IAAU;OACX,EAAkB;oBACL,EAAM,QAAQ,UAAU;;;;;OAKrC,EAAkB;kDACyB,EAAM,QAAQ,UAAU;iCACzC,EAAM,OAAO,YAAY;;;OAGnD,EAAkB;8BACK,EAAM,OAAO,YAAY;;;OAGhD,EAAkB;;;eAGV,EAAO,QAAQ,QAAQ;;;6EAGuC,EAAM,QAAQ,UAAU;;;OAG9F,EAAkB;iCACQ,EAAM,OAAO,YAAY;;;OAGnD,EAAkB;OAClB,EAAkB;;kDAEyB,EAAM,QAAQ,UAAU;;;OAGnE,EAAkB;OAClB,EAAkB;eACV,EAAM,KAAK,KAAK;;;;;OAKxB,EAAkB;;;;;OAKlB,EAAkB;OAClB,EAAkB;OAClB,EAAkB;;;;;;;OAOlB,EAAkB;;;;OAIlB,EAAkB;OAClB,EAAkB;;;;;;;;OAQlB,EAAkB;OAClB,EAAkB;OAClB,EAAkB;OAClB,EAAkB;OAClB,EAAkB;;;;;;;OAOlB,EAAkB;;;;;OAKlB,EAAkB;OAClB,EAAkB;OAClB,EAAkB;;;;;;;OAOlB,EAAkB;;;;OAIlB,EAAkB;OAClB,EAAkB;;;;;;;;OAQlB,EAAkB;OAClB,EAAkB;OAClB,EAAkB;OAClB,EAAkB;OAClB,EAAkB;;;;;;;OAOlB,EAAkB;;;;;OAKlB,EAAkB;OAClB,EAAkB;OAClB,EAAkB;;;;;;;OAOlB,EAAkB;;;;OAIlB,EAAkB;OAClB,EAAkB;;;;;;;;OAQlB,EAAkB;OAClB,EAAkB;OAClB,EAAkB;OAClB,EAAkB;OAClB,EAAkB;;;;;;;OAOlB,EAAkB;;;;;;eAMV,EAAM,KAAK,YAAY;;;oBAGlB,EAAM,QAAQ,UAAU;;;;OAIrC,EAAkB;;;;;;OAMlB,EAAkB;OAClB,EAAkB;;;;;;OAMlB,EAAkB,gCAAgC,EAAkB;;;;;;;OAOpE,EAAkB,gCAAgC,EAAkB;OACpE,EAAkB,gCAAgC,EAAkB;;;;;;;OAOpE,EAAkB;;;;;;;;;;;;OAYlB,EAAkB;;;;;OAKlB,EAAkB;;;;;;;;;;OAUlB,EAAkB;OAClB,EAAkB;OAClB,EAAkB;;;;;;;;OAQlB,EAAkB;;;;;;;;eAQV,EAAM,KAAK,SAAS;;;;OAI5B,EAAkB;;;;;;;;;;;;;;OAclB,EAAkB;;;;;;;;;;;;OAYlB,EAAkB;;;;;;;;OAQlB,EAAkB;;;;;;;OAOlB,EAAkB;kDACyB,EAAM,QAAQ,UAAU;0BAChD,EAAM,OAAO,YAAY;;;;;OAK5C,EAAkB;;;8BAGK,EAAM,OAAO,YAAY;;;OAGhD,EAAkB;;;;;OAKlB,EAAkB;;;;;;;OAOlB,EAAkB;;;;;OAKlB,EAAkB;;0BAEC,EAAM,OAAO,YAAY;;;OAG5C,EAAkB;;;;;OAKlB,EAAkB;;;;;OAKlB,EAAkB;OAClB,EAAkB;;;0BAGC,EAAM,OAAO,YAAY;;;;OAI5C,EAAkB;2BACE,EAAM,OAAO,UAAU;4BACtB,EAAM,OAAO,UAAU;;;AAIjD,KAAI,GAAe;AACjB,IAAc,cAAc;AAC5B;;CAGF,IAAM,IAAQ,SAAS,cAAc,QAAQ;AAG7C,CAFA,EAAM,KAAK,IACX,EAAM,cAAc,GACpB,SAAS,KAAK,YAAY,EAAM;;AAGlC,SAAS,GAAW,GAA0D;AAG5E,QAFI,KAAa,OAAa,EAAE,GAC5B,MAAM,QAAQ,EAAU,GAAS,IAC9B,CAAC,EAAU;;AAGpB,IAAa,MAAY,EACvB,eAAY,OACZ,YAAS,MACT,uBAAoB,IACpB,sBAAmB,cACnB,wBAAqB,gBACrB,uBAAoB,SACpB,wBAAqB,SACrB,aACA,6BAA0B,IAC1B,cACA,cACA,qBACA,UACA,aACA,aACA,GAAG,QACkB;AACrB,SAAgB;AACd,MAAc;IACb,EAAE,CAAC;CAEN,IAAM,IAAc,MAAc,aAC5B,IAAgB,GAA2B,IAC3C,IAAc,EAAiB,OAC/B,IACJ,MAAsB,gBAAgB,MAAsB,kBACxD,EAAY,QAAQ,WACpB,EAAY,QAAQ,WACpB,IACJ,MAAuB,eACnB,EAAY,QAAQ,WACpB,GACA,IAAS,KAAY,GACrB,IAAe,MAAc,KAAA,GAC7B,CAAC,IAAmB,MAAwB,GAAoB,EAAiB,EAEjF,KAAoB,IAAe,IAAY,IAC/C,IAAU,UAAe,KAAS,EAAE,EAAE,KAAK,MAAS,EAAK,IAAI,EAAE,CAAC,EAAM,CAAC,EACvE,IAAkB,GAAW,GAAkB,EAE/C,MAAgB,MAA+B;AAInD,EAHK,KACH,GAAqB,EAAqB,EAE5C,IAAW,EAAQ;IAGf,UAAwB;AACxB,IAAQ,WAAW,KACvB,GAAa,EAA6B;IAGtC,UAA0B;AAC9B,KAAa,EAAE,CAAsB;IAGjC,KAAmB,IAAe,KAAY,KAAS,GACvD,KAAkB,CAAC,IAAc,IAAoB,KAAA,GAAW,EAAU,CAAC,OAAO,QAAQ,CAAC,KAAK,IAAI,EAEpG,KAAqB,KACtB,EAAE,kBACH,kBAAC,QAAD;EAAM,WAAW,GAAG,EAAkB;YACpC,kBAAC,GAAD;GACE,MAAM,IAAW,eAAe;GAChC,MAAM;GACN,OAAO;IACL,OAAO,GAAG,EAAc;IACxB,QAAQ,GAAG,EAAc;IACzB,UAAU,GAAG,EAAc;IAC3B,WAAW,GAAG,EAAc;IAC5B,SAAS;IACV;GACD,CAAA;EACG,CAAA,GAEP,KAAA,GAEE,KAAgB,IAClB;EACA,GAAG,EAAM;EACR,iCAA4C,GAAG,EAAc;EAC7D,0BAAqC;EACrC,4BAAuC,EAAY,QAAQ;EAC3D,2BAAsC;EACtC,yBAAoC,GAAG,EAAO;EAChD,GACC,EAAM;AAEV,QACE,kBAAC,OAAD,EAAA,UAAA,CACG,KAAe,KACd,kBAAC,OAAD;EAAK,WAAW,GAAG,EAAkB;EAAY,gBAAc;YAA/D,CACE,kBAAC,UAAD;GACE,MAAK;GACL,WAAW,GAAG,EAAkB;GAChC,SAAS;GACT,UAAU,EAAQ,SAAS,KAAK,EAAgB,WAAW,EAAQ;aAJrE,CAME,kBAAC,QAAD;IAAM,WAAW,GAAG,EAAkB;IAAgB,eAAY;cAChE,kBAAC,GAAD;KAAM,MAAK;KAAa,MAAM;KAAM,CAAA;IAC/B,CAAA,EACN,EACM;MAET,kBAAC,UAAD;GACE,MAAK;GACL,WAAW,GAAG,EAAkB;GAChC,SAAS;GACT,UAAU,EAAgB,WAAW;aAJvC,CAME,kBAAC,QAAD;IAAM,WAAW,GAAG,EAAkB;IAAgB,eAAY;cAChE,kBAAC,GAAD;KAAM,MAAK;KAAkB,MAAM;KAAM,CAAA;IACpC,CAAA,EACN,EACM;KACL;KAGR,kBAAC,GAAD;EACE,GAAI;EACG;EACP,UAAU;EACV,YAAY;EACZ,WAAW;EACX,UAAU;EACV,WAAW;EACX,OAAO;EACP,gBAAc,IAAc,IAAS,KAAA;EACrC,4BAA0B,IAAc,IAAoB,KAAA;EAC5D,mBAAiB,KAAe,IAAS,IAAI,SAAS,KAAA;EACtD,oCAAkC,KAAe,IAA0B,SAAS,KAAA;EACpF,CAAA,CACE,EAAA,CAAA;;AAIV,GAAS,cAAc;;;ACjiBvB,IAAM,KAAW,uBAEX,KAAwE;CAC5E,IAAI;CACJ,IAAI;CACJ,IAAI;CACL;AAYD,SAAS,GAAe,GAAkD;AAGxE,QAFI,MAAS,UAAgB,OACzB,MAAS,UAAgB,OACtB;;AAGT,SAAS,GAAiB,GAAmD;AAG3E,QAFI,CAAC,KAAW,EAAQ,WAAW,IAAU,EAAE,GAExC,EAAQ,KAAK,MACd,OAAO,KAAW,YAAY,OAAO,KAAW,WAC3C;EACL,OAAO;EACP,OAAO;EACR,GAGI;EACL,OAAO,EAAO;EACd,OAAO,EAAO,SAAS,EAAO;EAC9B,MAAO,EAAgC;EACvC,UAAU,EAAO;EACjB,OAAO,EAAO;EACf,CACD;;AAGJ,SAAS,KAAe;AAEtB,KADI,OAAO,WAAa,OACpB,SAAS,eAAe,GAAS,CAAE;CAEvC,IAAM,EAAE,iBAAc,GAEhB,IAAQ,SAAS,cAAc,QAAQ;AA6G7C,CA5GA,EAAM,KAAK,IACX,EAAM,cAAc;;;;;;oBAMF,EAAU,UAAU,WAAW;gBACnC,EAAU,UAAU,YAAY,SAAS,EAAU,UAAU,OAAO;uBAC7D,EAAU,UAAU,OAAO;iBACjC,EAAU,UAAU,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;uBA2BtB,EAAU,KAAK,iBAAiB;;;;eAIxC,EAAU,KAAK,SAAS;;;;;;;;;;oBAUnB,EAAU,KAAK,mBAAmB;sBAChC,EAAU,KAAK,eAAe;uBAC7B,EAAU,KAAK,eAAe;eACtC,EAAU,KAAK,OAAO;;;;;;;;;;;;;;;;;;;;qBAoBhB,EAAU,WAAW,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAkCnD,SAAS,KAAK,YAAY,EAAM;;AAGlC,IAAa,MAAa,EAAE,YAAS,MAAM,SAAM,UAAO,GAAG,QAA4B;AACrF,SAAgB;AACd,MAAc;IACb,EAAE,CAAC;CAEN,IAAM,EACJ,YACA,UACA,iBACA,aACA,aACA,UACA,cACA,SACA,OACA,GAAG,MACD,GAEE,IAAe,KAAU,GAAe,EAAK,EAC7C,IAAoB,SAAc,GAAiB,EAAQ,EAAE,CAAC,EAAQ,CAAC,EAEvE,IAAc,EAAkB,IAChC,CAAC,GAAmB,KAAwB,GAC/C,KAA6C,GAAa,MAC5D,EAEK,IAAiB,KAAsC,GAEvD,IAAS,EAAiB,UAAU,KAAK,IAEzC,KAAgB,MAAqB;AACrC,OAAY,EAAO,aAEnB,MAAU,KAAA,KACZ,EAAqB,EAAO,MAAM,EAGpC,IAAW,EAAO,MAAM;IAGpB,IAA2B;EAC/B,GAAG;EACF,8BAAyC,EAAO;EAChD,iCAA4C,EAAO;EACnD,2BAAsC,EAAO;EAC7C,iCAA4C,EAAO;EACnD,4BAAuC,EAAO;EAC9C,8BAAyC,EAAO;EAChD,iCAA4C,EAAO;EACnD,4BAAuC,EAAO;EAChD;AAMD,QAJI,MACF,EAAU,0BAAoC,SAI9C,kBAAC,OAAD;EACE,GAAI;EACA;EACO;EACX,MAAK;EACL,iBAAe,IAAW,SAAS;EACnC,iBAAe,IAAQ,SAAS;EAChC,OAAO;EACP,qBAAA;EACA,gBAAc;EACd,oBAAkB,KAAQ,GAAe;YAEzC,kBAAC,OAAD;GAAK,WAAU;aACZ,EAAkB,KAAK,GAAQ,MAAU;IACxC,IAAM,IAAU,EAAO,UAAU,GAC3B,IAAiB,KAAY,EAAO;AAE1C,WACE,kBAAC,UAAD;KAEE,MAAK;KACL,WAAU;KACV,MAAK;KACL,gBAAc,IAAU,SAAS;KACjC,iBAAe,IAAiB,SAAS;KACzC,UAAU,IAAU,IAAI;KACxB,eAAe,EAAa,EAAO;KACnC,OAAO,EAAO;KACR;KACN,UAAU,CAAC,CAAC;eAEZ,kBAAC,QAAD;MAAM,WAAU;gBAAhB,CACG,EAAO,OAAO,kBAAC,QAAD;OAAM,WAAU;iBAA0B,EAAO;OAAY,CAAA,GAAG,MAC/E,kBAAC,QAAD,EAAA,UAAO,EAAO,SAAS,EAAO,OAAa,CAAA,CACtC;;KACA,EAhBF,GAAG,OAAO,EAAO,MAAM,CAAC,GAAG,IAgBzB;KAEX;GACE,CAAA;EACF,CAAA;GC3OJ,KAAkD;CACtD,MAAM;CACN,MAAM;CACN,MAAM;CACN,MAAM;CACN,MAAM;CACN,MAAM;CACN,IAAM;CACN,IAAM;CACP,EAEK,KAA6E;CACjF,SAAS;EACP,IAAI,EAAiB,MAAM,MAAM,QAAQ;EACzC,IAAI,EAAiB,MAAM,MAAM,QAAQ;EACzC,IAAI,EAAiB,MAAM,MAAM,QAAQ;EACzC,IAAI,EAAiB,MAAM,MAAM,QAAQ;EACzC,eAAe,EAAiB,MAAM,MAAM,QAAQ;EACrD;CACD,QAAQ;EACN,IAAI,EAAiB,MAAM,MAAM,OAAO;EACxC,IAAI,EAAiB,MAAM,MAAM,OAAO;EACxC,IAAI,EAAiB,MAAM,MAAM,OAAO;EACxC,IAAI,EAAiB,MAAM,MAAM,OAAO;EACxC,eAAe,EAAiB,MAAM,MAAM,OAAO;EACpD;CACF,EAEK,KAAW;AAEjB,SAAS,KAAe;AACtB,KAAI,OAAO,WAAa,IAAa;CACrC,IAAM,EAAE,aAAU,GACd,IAAQ,SAAS,eAAe,GAAS;AAO7C,CANK,MACH,IAAQ,SAAS,cAAc,QAAQ,EACvC,EAAM,KAAK,IACX,SAAS,KAAK,YAAY,EAAM,GAGlC,EAAM,cAAc;;gBAEN,EAAM,OAAO,MAAM,SAAS,EAAM,OAAO,MAAM;uBACxC,EAAM,OAAO,OAAO;oBACvB,EAAM,OAAO;;;oBAGb,EAAM,QAAQ,WAAW;;;;;;oBAMzB,EAAM,QAAQ,OAAO;iBACxB,EAAM,QAAQ,OAAO,EAAE,GAAG,EAAM,QAAQ,OAAO,EAAE;;uBAE3C,EAAM,OAAO,MAAM,SAAS,EAAM,OAAO,MAAM;;;;eAIvD,EAAM,KAAK,MAAM;;;;;;;;eAQjB,EAAM,YAAY,KAAK;gBACtB,EAAM,YAAY,KAAK;;;;;;eAMxB,EAAM,YAAY,MAAM;uBAChB,EAAM,YAAY,OAAO;;;;;;;eAOjC,EAAM,YAAY,SAAS;gBAC1B,EAAM,YAAY,SAAS;;;;;;;;eAQ5B,EAAM,YAAY,MAAM;;;;;;;;;;;;;;iBActB,EAAM,QAAQ,KAAK,QAAQ;eAC7B,EAAM,KAAK,KAAK;;;;;;;;;iBASd,EAAM,QAAQ,OAAO,QAAQ;oBAC1B,EAAM,OAAO,MAAM,SAAS,EAAM,OAAO,MAAM;;;;;;;iBAOlD,EAAM,QAAQ,OAAO,EAAE,GAAG,EAAM,QAAQ,OAAO,EAAE;;;;;;;eAOnD,EAAM,YAAY,KAAK;gBACtB,EAAM,YAAY,KAAK;;;;eAIxB,EAAM,YAAY,SAAS;gBAC1B,EAAM,YAAY,SAAS;;;;iBAI1B,EAAM,QAAQ,KAAK,OAAO;;;;iBAI1B,EAAM,QAAQ,OAAO,OAAO;;;;;;;;;;;;uBAYtB,EAAM,OAAO,iBAAiB;;;;;;oBAMjC,EAAM,QAAQ,iBAAiB;uBAC5B,EAAM,OAAO,MAAM,SAAS,EAAM,OAAO,MAAM;;;;;;;;;;;;AAatE,IAAa,MAAS,EACpB,cACA,cAAW,WACX,YAAS,MACT,cAAW,WACX,eAAY,qBACZ,cAAW,WACX,gBAAa,IACb,kBACA,gBACA,eAAY,IACZ,WACA,aACA,UACA,aACA,UACA,UACA,YAAS,SACT,gBAAa,UACb,aACA,SACA,WACA,GAAG,QACa;AAChB,SAAgB;AACd,MAAc;IACb,EAAE,CAAC;CAEN,IAAM,IAAgB,MAAU,IAAY,GAAgB,KAAa,GAAc,GAAU,KAE3F,KAAY,KAAe,KAAY,IAGvC,KAFY,MAAa,SAG3B,OACA,IAEF,kBAAC,QAAD;EAAM,OAAO;GAAE,SAAS;GAAe,YAAY;GAAU,KAAK;GAAG;YAArE,CACE,kBAAC,QAAD,EAAA,UAAO,KAAS,SAAe,CAAA,EAC/B,kBAAC,QAAD;GAAM,OAAO;IAAE,OAAO,EAAiB,MAAM,KAAK;IAAU,UAAU;IAAI,YAAY;IAAK;aAAE;GAAiB,CAAA,CACzG;MAEF,KAAS,SAIV,IACJ,MAAW,KAAA,IAEP,MAAa,SACX,OAEA,kBAAC,IAAD;EAAO,WAAW,MAAa,WAAW,aAAa;EAAc,MAR3D,MAAa,WAAW,KAAK;EAQ+C,OAAO,EAAE,OAAO,MAAa,WAAW,SAAS,KAAA,GAAW;YAAlJ;GACG,MAAc,gCACb,kBAAC,IAAD;IAAU,WAAU;IAAW,OAAO,MAAa,WAAW,EAAE,OAAO,QAAQ,GAAG,KAAA;IAAW,UAAU,MAAM,IAAW,EAAE;cAAE;IAEjH,CAAA;GAEZ,MAAc,aACb,kBAAC,IAAD;IAAU,WAAU;IAAY,OAAO,MAAa,WAAW,EAAE,OAAO,QAAQ,GAAG,KAAA;IAAW,UAAU,MAAM,IAAW,EAAE;cACxH,OAAO,EAAW,CAAC,aAAa;IACxB,CAAA;GAEb,kBAAC,IAAD;IAAU,WAAU;IAAU,OAAO,MAAa,WAAW,EAAE,OAAO,QAAQ,GAAG,KAAA;IAAW,UAAU,MAAM,IAAO,EAAE;cAClH,OAAO,EAAO,CAAC,aAAa;IACpB,CAAA;GACL;MAlBV,GAqBA,IAAuB,IAC3B,kBAAC,OAAD;EAAK,OAAO;GAAE,SAAS;GAAQ,YAAY;GAAc,KAAK;GAAI;YAAlE,CACE,kBAAC,OAAD;GAAK,OAAO,EAAE,YAAY,GAAG;aAAG;GAAoB,CAAA,EACpD,kBAAC,OAAD;GAAK,OAAO;IAAE,MAAM;IAAG,UAAU;IAAG;GAAG;GAAe,CAAA,CAClD;MACJ;AAEJ,QACE,kBAAC,GAAD;EACE,GAAI;EACJ,OAAO;EACP,OAAO;EACP,UAAU;EACV,QAAQ;EACE;EACJ;EACN,WAAW,4BAA4B,EAAS,iBAAiB,EAAO,GAAG,MAAa,WAAW,oBAAoB,mBAAmB,GAAG,IAAY,MAAM;EAC/J,OAAO;GACL,GAAG;GACH,UAAU,MAAW,gBAAgB,UAAU;GAChD;EACD,QAAQ;GACN,GAAG;GACH,MAAM;IACJ,iBAAiB,EAAiB,MAAM;IACxC,GAAG,GAAQ;IACZ;GACF;EACD,iBAAA;EACA,mBAAiB,KAAa;EAC9B,kBAAgB;EAChB,gBAAc;EACd,kBAAgB;EAChB,mBAAiB;EACjB,kBAAgB;YAEf;EACQ,CAAA;GC1TT,KAA2D;CAC/D,SAAS;CACT,MAAM;CACN,SAAS;CACT,OAAO;CACR,EAEK,KAA4D;CAChE,SAAS;CACT,MAAM;CACN,SAAS;CACT,OAAO;CACR;AAED,SAAS,GAAgB,GAAG,GAAkC;AAC5D,QAAO,EAAM,OAAO,QAAQ,CAAC,KAAK,IAAI;;AAGxC,SAAgB,GACd,GACA,GAKW;AACX,QAAO,GAAc,GAAuB,IAAS;EACnD,GAAG;EACH,WAAW,GAAgB,WAAW,2BAA2B,GAAS,UAAU;EACpF,OAAO;GACL,OAAO,GAAwB;GAC/B,SAAS;GACT,YAAY;GACZ,iBAAiB;GACjB,GAAG,GAAS;GACb;EACF,CAAC;;AAGJ,SAAgB,GACd,GAKW;AACX,QAAO,GAAwB,WAAW,EAAQ;;;;AC1CpD,IAAM,KAAuB;AAE7B,SAAS,EAAO,GAAsC;AAKpD,QAJI,CAAC,EAAO,QAAQ,EAAO,SAAS,KAAA,KAAa,CAAC,GAAiB,EAAO,KAAK,GACtE,IAGF;EACL,GAAG;EACH,MAAM,GAAwB,EAAO,MAAM,EAAE,MAAM,IAAsB,CAAC;EAC3E;;AAGH,SAAS,GAAiB,GAA6C;AACrE,QAAO,MAAS,aAAa,MAAS,UAAU,MAAS,aAAa,MAAS;;AAGjF,SAAS,EAAS,GAAoC,GAAmC;AAOvF,QANI,OAAO,KAAY,YAAY,KAAoB,CAAC,MAAM,QAAQ,EAAQ,IAAI,aAAa,IACtF,KAAS,EAA0B,SAAS,KAAA,IAC/C;EAAE,GAAI;EAA2B;EAAM,GACtC,IAGA;EAAE;EAAS;EAAM;;AAG1B,SAAgB,KAAa;CAC3B,IAAM,CAAC,GAAK,KAAiB,EAAQ,YAAY;AAYjD,QAAO,CAAC;EATN,GAAG;EACH,OAAO,MAA0B,EAAI,KAAK,EAAO,EAAO,CAAC;EACzD,UAAU,MAAuC,EAAI,KAAK,EAAO,EAAS,GAAS,UAAU,CAAC,CAAC;EAC/F,OAAO,MAAuC,EAAI,KAAK,EAAO,EAAS,GAAS,OAAO,CAAC,CAAC;EACzF,UAAU,MAAuC,EAAI,KAAK,EAAO,EAAS,GAAS,UAAU,CAAC,CAAC;EAC/F,QAAQ,MAAuC,EAAI,KAAK,EAAO,EAAS,GAAS,QAAQ,CAAC,CAAC;EAC3F,UAAU,MAAuC,EAAI,KAAK,EAAS,GAAS,UAAU,CAAC;EAGjF,EAAO,EAAc;;AAG/B,IAAa,KAAY;CACvB,OAAO,MAA0B,EAAQ,KAAK,EAAO,EAAO,CAAC;CAC7D,UAAU,MAAuC,EAAQ,KAAK,EAAO,EAAS,GAAS,UAAU,CAAC,CAAC;CACnG,OAAO,MAAuC,EAAQ,KAAK,EAAO,EAAS,GAAS,OAAO,CAAC,CAAC;CAC7F,UAAU,MAAuC,EAAQ,KAAK,EAAO,EAAS,GAAS,UAAU,CAAC,CAAC;CACnG,QAAQ,MAAuC,EAAQ,KAAK,EAAO,EAAS,GAAS,QAAQ,CAAC,CAAC;CAC/F,UAAU,MAAuC,EAAQ,KAAK,EAAS,GAAS,UAAU,CAAC;CAC3F,UAAU,MAAoB,EAAQ,QAAQ,EAAI;CACnD,ECtDK,KAAW,0BACX,KAA4B;AAElC,SAAS,KAAe;AACtB,KAAI,OAAO,WAAa,IAAa;CAErC,IAAI,IAAQ,SAAS,eAAe,GAAS;AAO7C,CANK,MACH,IAAQ,SAAS,cAAc,QAAQ,EACvC,EAAM,KAAK,IACX,SAAS,KAAK,YAAY,EAAM,GAGlC,EAAM,cAAc;;AAqBtB,SAAS,GAAgB,GAAG,GAAkC;AAC5D,QAAO,EAAM,OAAO,QAAQ,CAAC,KAAK,IAAI;;AAGxC,SAAS,GAAS,GAAiB,GAAmB;AAEpD,QADI,KAA+B,OAAa,IACzC,kBAAC,QAAD;EAAiB;YAAY;EAAY,CAAA;;AAGlD,SAAS,GAAiB,GAA+D;AACvF,QAAO,MAAS,aAAa,MAAS,UAAU,MAAS,aAAa,MAAS;;AAGjF,SAAS,EAAO,GAA+B,GAAwD;AACrG,KAAc;CACd,IAAM,IAAe,EAAO,QAAQ;AAEpC,QAAO;EACL,GAAG;EACH,WAAW,GAAgB,mBAAmB,EAAO,UAAU;EAC/D,MACE,EAAO,SAAS,GAAiB,EAAa,GAAG,GAAwB,GAAc,EAAE,MAAM,IAA2B,CAAC,GAAG,KAAA;EAChI,SAAS,GAAS,EAAO,SAAS,wBAAwB;EAC1D,OAAO,GAAS,EAAO,OAAO,wBAAwB;EACtD,aAAa,GAAS,EAAO,aAAa,8BAA8B;EACzE;;AAKH,SAAgB,KAAkB;CAChC,IAAM,CAAC,GAAK,KAAiB,GAAa,iBAAiB;AAe3D,QAbA,QAAgB;AACd,MAAc;IACb,EAAE,CAAC,EAWC,CAAC;EARN,OAAO,MAAW,EAAI,KAAK,EAAO,EAAO,CAAC;EAC1C,UAAU,MAAW,EAAI,QAAQ,EAAO,GAAQ,UAAU,CAAC;EAC3D,OAAO,MAAW,EAAI,KAAK,EAAO,GAAQ,OAAO,CAAC;EAClD,UAAU,MAAW,EAAI,QAAQ,EAAO,GAAQ,UAAU,CAAC;EAC3D,QAAQ,MAAW,EAAI,MAAM,EAAO,GAAQ,QAAQ,CAAC;EACrD,UAAU,MAAQ,EAAI,QAAQ,EAAI;EAG5B,EAAO,EAAc;;AAG/B,IAAa,KAAiB;CAC5B,OAAO,MAAkC,GAAa,KAAK,EAAO,EAAO,CAAC;CAC1E,UAAU,MAAkC,GAAa,QAAQ,EAAO,GAAQ,UAAU,CAAC;CAC3F,OAAO,MAAkC,GAAa,KAAK,EAAO,GAAQ,OAAO,CAAC;CAClF,UAAU,MAAkC,GAAa,QAAQ,EAAO,GAAQ,UAAU,CAAC;CAC3F,QAAQ,MAAkC,GAAa,MAAM,EAAO,GAAQ,QAAQ,CAAC;CACrF,UAAU,MAAoB,GAAa,QAAQ,EAAI;CACxD,EC5FK,KAA0B;AAIhC,SAAgB,GAAW,EAAE,SAAM,GAAG,KAA4B;AAChE,QACE,kBAAC,GAAD;EACE,GAAI;EACJ,MAAM,KAAQ,GAAoB,EAAE,MAAM,IAAyB,CAAC;EACpE,CAAA;;;;ACPN,IAAM,KAAW,kBACX,IAAgB,WAChB,KAA0B,2BAQ1B,KAAmD;CACvD,OAAO;CACP,SAAS;CACT,QAAQ;CACR,QAAQ;CACR,OAAO;CACR;AAED,SAAS,KAAe;AACtB,KAAI,OAAO,WAAa,IAAa;CAErC,IAAI,IAAQ,SAAS,eAAe,GAAS;AAC7C,CAAK,MACH,IAAQ,SAAS,cAAc,QAAQ,EACvC,EAAM,KAAK,IACX,SAAS,KAAK,YAAY,EAAM;CAGlC,IAAM,EAAE,WAAQ,aAAU;AAC1B,GAAM,cAAc;;;;;OAKf,EAAc;OACd,EAAc;OACd,EAAc;;;;OAId,EAAc;0CACqB,GAAqB,QAAQ;2CAC5B,GAAqB,QAAQ;;;;;;;;OAQjE,EAAc;eACN,EAAO,QAAQ,QAAQ;;;OAG/B,GAAwB;0CACW,GAAqB,QAAQ;2CAC5B,GAAqB,QAAQ;;;mCAGrC,EAAO,QAAQ,QAAQ,eAAe,EAAM,WAAW,SAAS;;;;;OAK5F,GAAwB;;;;;oBAKX,EAAM,WAAW,QAAQ;;;OAGtC,EAAc;OACd,EAAc;eACN,EAAM,KAAK,MAAM;;;;;;;OAOzB,EAAc,gBAAgB,GAAwB;+BAC9B,GAAqB,MAAM;;;OAGnD,EAAc,gBAAgB,GAAwB;+BAC9B,GAAqB,MAAM;;;OAGnD,EAAc;;;;;AAMrB,SAAS,GAAgB,GAAG,GAAkC;AAC5D,QAAO,EAAM,OAAO,QAAQ,CAAC,KAAK,IAAI;;AAGxC,SAAS,GAAiB,GAAmC,GAA6B;AAKxF,QAJI,MAAS,KAAA,IACJ,GAAqB,KAAY,aAGnC,OAAO,KAAS,WAAW,GAAG,EAAK,MAAM;;AAGlD,SAAS,KAAiB;AACxB,QAAO,kBAAC,QAAD;EAAM,WAAW;EAAyB,eAAY;EAAS,CAAA;;AAGxE,SAAgB,GAAK,EAAE,cAAW,cAAW,UAAO,WAAW,UAAO,iBAAc,GAAG,KAAsB;AAC3G,SAAgB;AACd,MAAc;IACb,EAAE,CAAC;CAEN,IAAM,IAA6B;EACjC,GAAG;EACF,yBAAoC,GAAiB,GAAc,EAAK;EAC1E;AAED,QACE,kBAAC,IAAD;EACE,GAAI;EACE;EACN,WAAW,GAAgB,GAAe,EAAU;EACpD,WAAW,KAAa,kBAAC,IAAD,EAAkB,CAAA;EAC1C,OAAO;EACP,CAAA;;ACxGN,IAAa,KAAc,OAAO,QAlBT,MACvB,kBAAC,GAAD;CAAgB,MAAM,EAAE,UAAU,IAAM;WACtC,kBAAC,GAAD,EAAgB,GAAI,GAAS,CAAA;CACd,CAAA,EAeuC;CACxD,QAbwB,MACxB,kBAAC,GAAD;EAAgB,MAAM,EAAE,UAAU,IAAM;YACtC,kBAAC,EAAe,OAAhB,EAAsB,GAAI,GAAS,CAAA;EACpB,CAAA;CAWjB,UAR0B,MAC1B,kBAAC,GAAD;EAAgB,MAAM,EAAE,UAAU,IAAM;YACtC,kBAAC,EAAe,SAAhB,EAAwB,GAAI,GAAS,CAAA;EACtB,CAAA;CAMlB,CAAC"}