ods-ant 0.1.0 → 0.2.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 (83) hide show
  1. package/README.md +24 -0
  2. package/dist-lib/index.cjs +2609 -967
  3. package/dist-lib/index.cjs.map +1 -1
  4. package/dist-lib/index.js +4835 -2461
  5. package/dist-lib/index.js.map +1 -1
  6. package/dist-lib/ontadaTheme-DEEJ31G9.cjs +2 -0
  7. package/dist-lib/ontadaTheme-DEEJ31G9.cjs.map +1 -0
  8. package/dist-lib/ontadaTheme-DoyP_6uO.js +1022 -0
  9. package/dist-lib/ontadaTheme-DoyP_6uO.js.map +1 -0
  10. package/dist-lib/theme.cjs +1 -2
  11. package/dist-lib/theme.js +2 -611
  12. package/dist-lib/types/ds/display/Badge.d.ts +41 -0
  13. package/dist-lib/types/ds/display/Badge.d.ts.map +1 -0
  14. package/dist-lib/types/ds/display/Empty.d.ts +24 -0
  15. package/dist-lib/types/ds/display/Empty.d.ts.map +1 -0
  16. package/dist-lib/types/ds/display/Segmented.d.ts +3 -1
  17. package/dist-lib/types/ds/display/Segmented.d.ts.map +1 -1
  18. package/dist-lib/types/ds/display/Table.d.ts +30 -1
  19. package/dist-lib/types/ds/display/Table.d.ts.map +1 -1
  20. package/dist-lib/types/ds/display/Tag.d.ts +11 -2
  21. package/dist-lib/types/ds/display/Tag.d.ts.map +1 -1
  22. package/dist-lib/types/ds/display/Tooltip.d.ts +1 -0
  23. package/dist-lib/types/ds/display/Tooltip.d.ts.map +1 -1
  24. package/dist-lib/types/ds/display/index.d.ts +2 -0
  25. package/dist-lib/types/ds/display/index.d.ts.map +1 -1
  26. package/dist-lib/types/ds/feedback/Drawer.d.ts +33 -0
  27. package/dist-lib/types/ds/feedback/Drawer.d.ts.map +1 -0
  28. package/dist-lib/types/ds/feedback/Modal.d.ts.map +1 -1
  29. package/dist-lib/types/ds/feedback/Spin.d.ts.map +1 -1
  30. package/dist-lib/types/ds/feedback/feedbackIcons.d.ts.map +1 -1
  31. package/dist-lib/types/ds/feedback/index.d.ts +1 -0
  32. package/dist-lib/types/ds/feedback/index.d.ts.map +1 -1
  33. package/dist-lib/types/ds/forms/AccessibleCheckboxGroup.d.ts.map +1 -1
  34. package/dist-lib/types/ds/forms/AccessibleDatePicker.d.ts.map +1 -1
  35. package/dist-lib/types/ds/forms/AccessibleRadioGroup.d.ts.map +1 -1
  36. package/dist-lib/types/ds/forms/AccessibleSelect.d.ts +2 -2
  37. package/dist-lib/types/ds/forms/AccessibleSelect.d.ts.map +1 -1
  38. package/dist-lib/types/ds/forms/AccessibleSwitch.d.ts.map +1 -1
  39. package/dist-lib/types/ds/forms/AutoComplete.d.ts.map +1 -1
  40. package/dist-lib/types/ds/forms/Cascader.d.ts.map +1 -1
  41. package/dist-lib/types/ds/forms/Checkbox.d.ts.map +1 -1
  42. package/dist-lib/types/ds/forms/ClearableAutoComplete.d.ts.map +1 -1
  43. package/dist-lib/types/ds/forms/ClearableInputNumber.d.ts +1 -1
  44. package/dist-lib/types/ds/forms/ClearableInputNumber.d.ts.map +1 -1
  45. package/dist-lib/types/ds/forms/ClearableSelect.d.ts +2 -2
  46. package/dist-lib/types/ds/forms/ClearableSelect.d.ts.map +1 -1
  47. package/dist-lib/types/ds/forms/DatePicker.d.ts.map +1 -1
  48. package/dist-lib/types/ds/forms/Form.d.ts +35 -0
  49. package/dist-lib/types/ds/forms/Form.d.ts.map +1 -0
  50. package/dist-lib/types/ds/forms/FormError.d.ts.map +1 -1
  51. package/dist-lib/types/ds/forms/FormSuccess.d.ts.map +1 -1
  52. package/dist-lib/types/ds/forms/FormWarning.d.ts.map +1 -1
  53. package/dist-lib/types/ds/forms/Input.d.ts +17 -0
  54. package/dist-lib/types/ds/forms/Input.d.ts.map +1 -1
  55. package/dist-lib/types/ds/forms/InputNumber.d.ts +8 -0
  56. package/dist-lib/types/ds/forms/InputNumber.d.ts.map +1 -0
  57. package/dist-lib/types/ds/forms/TimePicker.d.ts +1 -1
  58. package/dist-lib/types/ds/forms/TimePicker.d.ts.map +1 -1
  59. package/dist-lib/types/ds/forms/autoCompleteStyles.d.ts.map +1 -1
  60. package/dist-lib/types/ds/forms/datePickerStyles.d.ts.map +1 -1
  61. package/dist-lib/types/ds/forms/index.d.ts +2 -0
  62. package/dist-lib/types/ds/forms/index.d.ts.map +1 -1
  63. package/dist-lib/types/ds/forms/inputNumberStyles.d.ts.map +1 -1
  64. package/dist-lib/types/ds/forms/selectStyles.d.ts.map +1 -1
  65. package/dist-lib/types/ds/forms/timePickerStyles.d.ts.map +1 -1
  66. package/dist-lib/types/ds/navigation/Dropdown.d.ts +7 -0
  67. package/dist-lib/types/ds/navigation/Dropdown.d.ts.map +1 -0
  68. package/dist-lib/types/ds/navigation/Pagination.d.ts +25 -0
  69. package/dist-lib/types/ds/navigation/Pagination.d.ts.map +1 -1
  70. package/dist-lib/types/ds/navigation/Tabs.d.ts +4 -1
  71. package/dist-lib/types/ds/navigation/Tabs.d.ts.map +1 -1
  72. package/dist-lib/types/ds/navigation/dropdownStyles.d.ts +4 -0
  73. package/dist-lib/types/ds/navigation/dropdownStyles.d.ts.map +1 -0
  74. package/dist-lib/types/ds/navigation/index.d.ts +1 -0
  75. package/dist-lib/types/ds/navigation/index.d.ts.map +1 -1
  76. package/dist-lib/types/ds/navigation/stepsStyles.d.ts.map +1 -1
  77. package/dist-lib/types/theme/ontadaTheme.d.ts +370 -0
  78. package/dist-lib/types/theme/ontadaTheme.d.ts.map +1 -1
  79. package/dist-lib/types/tokens/core.d.ts +54 -0
  80. package/dist-lib/types/tokens/core.d.ts.map +1 -0
  81. package/package.json +1 -1
  82. package/dist-lib/theme.cjs.map +0 -1
  83. package/dist-lib/theme.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","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":"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"}
1
+ {"version":3,"file":"index.cjs","names":[],"sources":["../src/ds/forms/Button.tsx","../src/ds/forms/Form.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/inputNumberStyles.ts","../src/ds/forms/InputNumber.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/display/Tooltip.tsx","../src/ds/navigation/Pagination.tsx","../src/ds/navigation/stepsStyles.ts","../src/ds/navigation/Steps.tsx","../src/ds/navigation/Tabs.tsx","../src/ds/navigation/dropdownStyles.ts","../src/ds/navigation/Dropdown.tsx","../src/ds/display/Badge.tsx","../src/ds/display/Empty.tsx","../src/ds/display/Tag.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","../src/ds/feedback/Drawer.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","import { Form as AntForm } from 'antd';\nimport type { FormProps as AntFormProps } from 'antd';\nimport type { CSSProperties, ReactNode } from 'react';\nimport { useEffect } from 'react';\nimport { dsSemanticTokens } from '../../theme/ontadaTheme';\n\nexport type DSFormVariant = 'standard' | 'compact' | 'clinical' | 'review' | 'wizardSection';\nexport type DSFormRequiredMark = 'asterisk' | 'optional' | 'none';\n\nexport type FormProps<Values = any> = Omit<\n AntFormProps<Values>,\n 'layout' | 'requiredMark' | 'colon' | 'size' | 'variant'\n> & {\n /** DS form workflow variant. */\n dsVariant?: DSFormVariant;\n /** DS required marker treatment. */\n dsRequiredMark?: DSFormRequiredMark;\n /** Optional form-level validation summary shown before fields. */\n dsValidationSummary?: ReactNode;\n /** Optional section title for clinical, review, or wizard form sections. */\n dsSectionTitle?: ReactNode;\n /** Optional section description displayed below the section title. */\n dsSectionDescription?: ReactNode;\n /** Optional action slot aligned with the section title. */\n dsSectionActions?: ReactNode;\n};\n\ntype VariantDefaults = {\n layout: NonNullable<AntFormProps['layout']>;\n size: NonNullable<AntFormProps['size']>;\n requiredMark: AntFormProps['requiredMark'];\n colon: boolean;\n};\n\ntype DSFormComponent = (<Values = any>(props: FormProps<Values>) => ReactNode) & {\n Item: typeof AntForm.Item;\n List: typeof AntForm.List;\n ErrorList: typeof AntForm.ErrorList;\n Provider: typeof AntForm.Provider;\n useForm: typeof AntForm.useForm;\n useFormInstance: typeof AntForm.useFormInstance;\n useWatch: typeof AntForm.useWatch;\n};\n\nconst STYLE_ID = 'ds-form-styles';\n\nconst VARIANT_DEFAULTS: Record<DSFormVariant, VariantDefaults> = {\n standard: {\n layout: 'vertical',\n size: 'middle',\n requiredMark: true,\n colon: false,\n },\n compact: {\n layout: 'vertical',\n size: 'small',\n requiredMark: true,\n colon: false,\n },\n clinical: {\n layout: 'vertical',\n size: 'middle',\n requiredMark: true,\n colon: false,\n },\n review: {\n layout: 'horizontal',\n size: 'middle',\n requiredMark: false,\n colon: false,\n },\n wizardSection: {\n layout: 'vertical',\n size: 'middle',\n requiredMark: 'optional',\n colon: false,\n },\n};\n\nconst REQUIRED_MARK_MAP: Record<DSFormRequiredMark, AntFormProps['requiredMark']> = {\n asterisk: true,\n optional: 'optional',\n none: false,\n};\n\nfunction injectStyles() {\n if (typeof document === 'undefined') return;\n\n const { form } = 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-form-shell {\n display: flex;\n flex-direction: column;\n gap: var(--ds-form-section-gap);\n padding: var(--ds-form-shell-padding);\n border-radius: ${form.border.radius};\n font-family: 'Nunito', sans-serif;\n }\n\n .ds-form-shell[data-ds-form-variant='clinical'] {\n background: ${form.surface.clinical};\n border: ${form.border.width} solid ${form.border.color};\n }\n\n .ds-form-shell[data-ds-form-variant='review'] {\n background: ${form.surface.review};\n border: ${form.border.width} solid ${form.border.color};\n }\n\n .ds-form-shell[data-ds-form-variant='wizardSection'] {\n background: ${form.surface.background};\n border: ${form.border.width} solid ${form.border.color};\n }\n\n .ds-form-heading {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 16px;\n }\n\n .ds-form-heading-copy {\n display: flex;\n flex-direction: column;\n gap: 4px;\n min-width: 0;\n }\n\n .ds-form-section-title {\n color: ${form.text.sectionTitle};\n font-size: ${form.typography.sectionTitle.fontSize};\n font-weight: ${form.typography.sectionTitle.fontWeight};\n line-height: ${form.typography.sectionTitle.lineHeight};\n letter-spacing: 0;\n margin: 0;\n }\n\n .ds-form-section-description {\n color: ${form.text.description};\n font-size: ${form.typography.sectionDescription.fontSize};\n font-weight: ${form.typography.sectionDescription.fontWeight};\n line-height: ${form.typography.sectionDescription.lineHeight};\n letter-spacing: 0;\n margin: 0;\n }\n\n .ds-form-summary {\n display: flex;\n flex-direction: column;\n gap: 4px;\n padding: 12px 14px;\n background: ${form.surface.error};\n border: ${form.border.width} solid ${form.text.error};\n border-radius: ${form.border.radius};\n color: ${form.text.error};\n font-size: ${form.typography.help.fontSize};\n font-weight: ${form.typography.help.fontWeight};\n line-height: ${form.typography.help.lineHeight};\n }\n\n .ds-form.ant-form {\n margin: 0;\n color: ${form.text.label};\n font-family: 'Nunito', sans-serif;\n }\n\n .ds-form.ant-form input.ds-input.ant-input,\n .ds-form.ant-form .ds-input.ant-input-affix-wrapper,\n .ds-form.ant-form .ds-input.ant-input-search,\n .ds-form.ant-form .ds-input.ant-space-compact.ant-input-search,\n .ds-form.ant-form .ds-select.ant-select:not(.ant-select-multiple),\n .ds-form.ant-form .ds-input-number.ant-input-number,\n .ds-form.ant-form .ds-input-number.ant-input-number-affix-wrapper,\n .ds-form.ant-form .ds-date-picker.ant-picker,\n .ds-form.ant-form .ds-time-picker.ant-picker {\n height: var(--ds-form-control-height) !important;\n min-height: var(--ds-form-control-height) !important;\n border-radius: ${dsSemanticTokens.input.border.radius} !important;\n box-sizing: border-box !important;\n }\n\n .ds-form.ant-form input.ds-input.ant-input,\n .ds-form.ant-form .ds-input.ant-input-affix-wrapper {\n padding: var(--ds-form-control-padding-y) var(--ds-form-control-padding-x) !important;\n }\n\n .ds-form.ant-form .ds-select.ant-select:not(.ant-select-multiple),\n .ds-form.ant-form .ds-date-picker.ant-picker,\n .ds-form.ant-form .ds-time-picker.ant-picker {\n padding: 0 var(--ds-form-control-padding-x) !important;\n }\n\n .ds-form.ant-form .ds-select.ant-select:not(.ant-select-multiple) .ant-select-content,\n .ds-form.ant-form .ds-select.ant-select:not(.ant-select-multiple) .ant-select-selection-item,\n .ds-form.ant-form .ds-select.ant-select:not(.ant-select-multiple) .ant-select-selection-placeholder {\n height: 100% !important;\n min-height: 0 !important;\n }\n\n .ds-form.ant-form .ant-form-item {\n margin-bottom: var(--ds-form-item-gap);\n }\n\n .ds-form.ant-form .ant-form-item:last-child {\n margin-bottom: 0;\n }\n\n .ds-form.ant-form .ant-form-item-label {\n padding-bottom: 6px;\n }\n\n .ds-form.ant-form .ant-form-item-label > label {\n color: ${form.text.label};\n font-size: ${form.typography.label.fontSize};\n font-weight: ${form.typography.label.fontWeight};\n line-height: ${form.typography.label.lineHeight};\n letter-spacing: 0;\n height: auto;\n }\n\n .ds-form.ant-form .ant-form-item-label > label::after {\n display: none;\n }\n\n .ds-form.ant-form .ant-form-item-required::before,\n .ds-form.ant-form .ant-form-item-required-mark-optional::before {\n color: ${form.text.required} !important;\n font-family: 'Nunito', sans-serif;\n font-weight: 700;\n }\n\n .ds-form.ant-form .ant-form-item-optional {\n color: ${form.text.optional};\n font-size: 12px;\n font-weight: 600;\n line-height: 16px;\n margin-inline-start: 6px;\n }\n\n .ds-form.ant-form .ant-form-item-explain,\n .ds-form.ant-form .ant-form-item-extra {\n font-size: ${form.typography.help.fontSize};\n font-weight: ${form.typography.help.fontWeight};\n line-height: ${form.typography.help.lineHeight};\n letter-spacing: 0;\n margin-top: 4px;\n }\n\n .ds-form.ant-form .ant-form-item-explain-error {\n color: ${form.text.error};\n }\n\n .ds-form.ant-form .ant-form-item-explain-warning {\n color: ${form.text.warning};\n }\n\n .ds-form.ant-form .ant-form-item-has-success .ant-form-item-explain,\n .ds-form.ant-form .ant-form-item-has-success .ant-form-item-extra {\n color: ${form.text.success};\n }\n\n .ds-form.ant-form[data-ds-form-variant='compact'] .ant-form-item-label {\n padding-bottom: 4px;\n }\n\n .ds-form.ant-form[data-ds-form-variant='review'] .ant-form-item {\n padding: 10px 0;\n border-bottom: ${form.border.width} solid ${form.border.color};\n margin-bottom: 0 !important;\n }\n\n .ds-form.ant-form[data-ds-form-variant='review'] .ant-form-item:last-child {\n padding-bottom: 0;\n border-bottom: 0;\n margin-bottom: 0 !important;\n }\n\n .ds-form.ant-form[data-ds-form-variant='review'] .ant-form-item:first-child {\n padding-top: 0;\n }\n\n .ds-form.ant-form[data-ds-form-variant='review'] .ant-form-item-row {\n display: grid !important;\n grid-template-columns: minmax(140px, 180px) minmax(0, 1fr);\n column-gap: 16px;\n align-items: start;\n min-height: 22px;\n width: 100%;\n }\n\n .ds-form.ant-form[data-ds-form-variant='review'] .ant-form-item-label {\n flex: none !important;\n max-width: none !important;\n min-height: 22px;\n padding: 0 !important;\n text-align: left !important;\n white-space: normal;\n }\n\n .ds-form.ant-form[data-ds-form-variant='review'] .ant-form-item-control {\n flex: none !important;\n min-width: 0;\n min-height: 22px;\n }\n\n .ds-form.ant-form[data-ds-form-variant='review'] .ant-form-item-control-input {\n min-height: 22px;\n align-items: flex-start;\n }\n\n .ds-form.ant-form[data-ds-form-variant='review'] .ant-form-item-control-input-content {\n min-height: 22px;\n line-height: 22px;\n color: ${form.text.label};\n }\n\n .ds-form.ant-form[data-ds-form-variant='review'] .ant-form-item-label > label {\n display: inline-flex;\n min-height: 22px;\n align-items: flex-start;\n color: ${form.text.description};\n line-height: 22px;\n white-space: normal;\n }\n\n @media (max-width: 640px) {\n .ds-form.ant-form[data-ds-form-variant='review'] .ant-form-item-row {\n grid-template-columns: 1fr;\n row-gap: 2px;\n }\n }\n `;\n}\n\nfunction getVariantStyle(variant: DSFormVariant) {\n const { form } = dsSemanticTokens;\n const { input } = dsSemanticTokens;\n const spacing = form.spacing[variant];\n const controlSize = VARIANT_DEFAULTS[variant].size === 'small' ? 'small' : 'middle';\n const controlTokens = input.padding[controlSize];\n\n return {\n '--ds-form-item-gap': spacing.itemGap,\n '--ds-form-section-gap': spacing.sectionGap,\n '--ds-form-shell-padding': spacing.shellPadding,\n '--ds-form-control-height': input.height[controlSize],\n '--ds-form-control-padding-x': controlTokens.x,\n '--ds-form-control-padding-y': controlTokens.y,\n } as CSSProperties;\n}\n\nexport const FormBase = <Values = any,>({\n dsVariant = 'standard',\n dsRequiredMark,\n dsValidationSummary,\n dsSectionTitle,\n dsSectionDescription,\n dsSectionActions,\n className: userClassName = '',\n rootClassName: userRootClassName = '',\n style: userStyle = {},\n children,\n ...restProps\n}: FormProps<Values>) => {\n useEffect(() => {\n injectStyles();\n }, []);\n\n const defaults = VARIANT_DEFAULTS[dsVariant];\n const requiredMark = dsRequiredMark ? REQUIRED_MARK_MAP[dsRequiredMark] : defaults.requiredMark;\n const className = `ds-form${userClassName ? ` ${userClassName}` : ''}`;\n const rootClassName = `ds-form-root${userRootClassName ? ` ${userRootClassName}` : ''}`;\n const variantStyle = getVariantStyle(dsVariant);\n const hasSectionHeader = Boolean(dsSectionTitle || dsSectionDescription || dsSectionActions);\n\n const form = (\n <AntForm<Values>\n {...restProps}\n className={className}\n rootClassName={rootClassName}\n style={{ ...variantStyle, ...userStyle }}\n layout={defaults.layout}\n size={defaults.size}\n requiredMark={requiredMark}\n colon={defaults.colon}\n variant=\"outlined\"\n data-ds-form-variant={dsVariant}\n >\n {dsValidationSummary ? (\n <div className=\"ds-form-summary\" role=\"alert\" aria-live=\"polite\">\n {dsValidationSummary}\n </div>\n ) : null}\n {children}\n </AntForm>\n );\n\n if (!hasSectionHeader && (dsVariant === 'standard' || dsVariant === 'compact')) {\n return form;\n }\n\n return (\n <section\n className=\"ds-form-shell\"\n style={variantStyle}\n data-ds-form-variant={dsVariant}\n >\n {hasSectionHeader ? (\n <div className=\"ds-form-heading\">\n <div className=\"ds-form-heading-copy\">\n {dsSectionTitle ? <h3 className=\"ds-form-section-title\">{dsSectionTitle}</h3> : null}\n {dsSectionDescription ? (\n <p className=\"ds-form-section-description\">{dsSectionDescription}</p>\n ) : null}\n </div>\n {dsSectionActions ? <div>{dsSectionActions}</div> : null}\n </div>\n ) : null}\n {form}\n </section>\n );\n};\n\nFormBase.displayName = 'Form';\n\nexport const Form = Object.assign(FormBase, {\n Item: AntForm.Item,\n List: AntForm.List,\n ErrorList: AntForm.ErrorList,\n Provider: AntForm.Provider,\n useForm: AntForm.useForm,\n useFormInstance: AntForm.useFormInstance,\n useWatch: AntForm.useWatch,\n}) as DSFormComponent;\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';\nimport { CORE_COLORS } from '../../tokens/core';\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') {\n return;\n }\n\n const { input } = 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_SELECT_CLASS}.ant-select {\n border-color: ${input.border.default} !important;\n border-width: ${input.border.widthDefault} !important;\n border-style: solid !important;\n border-radius: ${input.border.radius} !important;\n background-color: ${input.background.default} !important;\n font-family: var(--ant-font-family, 'Nunito', sans-serif) !important;\n box-shadow: none !important;\n transition: none !important;\n display: inline-flex !important;\n align-items: center !important;\n box-sizing: border-box !important;\n overflow: hidden !important;\n }\n\n .${DS_SELECT_CLASS}.ant-select .ant-select-selector {\n width: 100% !important;\n height: 100% !important;\n min-height: 100% !important;\n padding: 0 !important;\n border: 0 !important;\n border-radius: ${input.border.radius} !important;\n background: transparent !important;\n box-shadow: none !important;\n display: flex !important;\n align-items: center !important;\n box-sizing: border-box !important;\n }\n\n .${DS_SELECT_CLASS}.ant-select.ant-select-outlined {\n border: ${input.border.widthDefault} solid ${input.border.default} !important;\n box-shadow: none !important;\n }\n\n .${DS_SELECT_CLASS}.ant-select .ant-select-content {\n display: flex !important;\n height: 100% !important;\n min-height: 0 !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 height: 100% !important;\n min-height: 0 !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 border: none !important;\n outline: none !important;\n box-shadow: none !important;\n background: transparent !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 ${input.border.hover} !important;\n box-shadow: none !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 ${input.border.hover} !important;\n box-shadow: none !important;\n }\n\n .${DS_SELECT_CLASS}.ant-select.ant-select-focused,\n .${DS_SELECT_CLASS}.ant-select.ant-select-open {\n border-color: ${input.border.focus} !important;\n border-width: ${input.border.widthFocus} !important;\n border-style: solid !important;\n box-shadow: none !important;\n outline: none !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: ${input.border.focus} !important;\n border-width: ${input.border.widthFocus} !important;\n border-style: solid !important;\n box-shadow: none !important;\n outline: none !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: ${input.border.focus} !important;\n border-width: ${input.border.widthFocus} !important;\n border-style: solid !important;\n box-shadow: none !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: ${input.border.focus} !important;\n border-width: ${input.border.widthFocus} !important;\n border-style: solid !important;\n box-shadow: none !important;\n outline: none !important;\n }\n\n .${DS_SELECT_CLASS}.ant-select .ant-select-selector,\n .${DS_SELECT_CLASS}.ant-select:focus-within,\n .${DS_SELECT_CLASS}.ant-select [role='combobox']:focus,\n .${DS_SELECT_CLASS}.ant-select [role='combobox']:focus-visible {\n outline: none !important;\n box-shadow: none !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: ${CORE_COLORS.text.strong} !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: ${CORE_COLORS.text.strong} !important;\n font-weight: 600 !important;\n }\n\n .${DS_SELECT_CLASS}.ant-select.ant-select-status-error {\n border-color: ${input.border.error} !important;\n box-shadow: none !important;\n }\n\n .${DS_SELECT_CLASS}.ant-select.ant-select-status-warning {\n border-color: ${CORE_COLORS.status.warning} !important;\n box-shadow: none !important;\n }\n\n .${DS_SELECT_CLASS}.ant-select.ant-select-status-success {\n border-color: ${input.border.success} !important;\n box-shadow: none !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: ${input.border.default} !important;\n box-shadow: none !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 border-color: ${input.border.default} !important;\n box-shadow: none !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 border-radius: ${input.border.radius} !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 height: 100% !important;\n min-height: 0 !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 border-radius: ${input.border.radius} !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 height: 100% !important;\n min-height: 0 !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 border-radius: ${input.border.radius} !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 height: 100% !important;\n min-height: 0 !important;\n line-height: 18px !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.ant-select-dropdown {\n border: 1px solid ${CORE_COLORS.text.primary} !important;\n border-radius: 4px !important;\n background: ${CORE_COLORS.text.inverse} !important;\n --ant-select-option-active-bg: transparent;\n --ant-select-option-selected-bg: ${CORE_COLORS.accent.highlightSoft};\n box-shadow: 0 4px 4px color-mix(in srgb, ${CORE_COLORS.text.primary} 15%, transparent) !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 ${CORE_COLORS.text.disabled} !important;\n min-height: 34px !important;\n padding: 8px 16px !important;\n border-radius: 0 !important;\n color: ${CORE_COLORS.text.primary} !important;\n font-family: var(--ant-font-family, 'Nunito', sans-serif) !important;\n font-size: 14px !important;\n line-height: 18px !important;\n background: ${CORE_COLORS.text.inverse} !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: ${CORE_COLORS.surface.canvas} !important;\n background-color: ${CORE_COLORS.surface.canvas} !important;\n background-image: none !important;\n color: ${CORE_COLORS.text.strong} !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: ${CORE_COLORS.text.strong} !important;\n font-weight: 600 !important;\n }\n\n .${DS_SELECT_DROPDOWN_CLASS}.ant-select-dropdown .ant-select-item-option-selected {\n background: ${CORE_COLORS.accent.highlightSoft} !important;\n background-color: ${CORE_COLORS.accent.highlightSoft} !important;\n background-image: none !important;\n color: ${CORE_COLORS.text.strong} !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: ${CORE_COLORS.accent.highlightSoft} !important;\n background-color: ${CORE_COLORS.accent.highlightSoft} !important;\n background-image: none !important;\n color: ${CORE_COLORS.text.strong} !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: ${CORE_COLORS.accent.highlightSoft} !important;\n background-color: ${CORE_COLORS.accent.highlightSoft} !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: ${CORE_COLORS.accent.highlight};\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 ${CORE_COLORS.text.disabled} !important;\n background: ${CORE_COLORS.text.inverse} !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 ${CORE_COLORS.text.muted} !important;\n border-radius: 2px !important;\n background: ${CORE_COLORS.text.inverse} !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: ${CORE_COLORS.brand.primary} !important;\n background: ${CORE_COLORS.brand.primary} !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 ${CORE_COLORS.text.inverse};\n border-bottom: 2px solid ${CORE_COLORS.text.inverse};\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: ${CORE_COLORS.text.inverse};\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: ${CORE_COLORS.text.inverse} !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: ${CORE_COLORS.text.inverse} !important;\n --ant-select-option-active-bg: ${CORE_COLORS.surface.canvas};\n --ant-select-option-selected-bg: ${CORE_COLORS.accent.highlightSoft};\n border: 1px solid ${CORE_COLORS.text.primary} !important;\n border-radius: 4px !important;\n box-shadow: 0 4px 4px color-mix(in srgb, ${CORE_COLORS.text.primary} 15%, transparent) !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: ${CORE_COLORS.text.inverse} !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: ${CORE_COLORS.text.primary} !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: ${CORE_COLORS.text.disabled} !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 ${CORE_COLORS.text.disabled} !important;\n background: ${CORE_COLORS.text.inverse} !important;\n color: ${CORE_COLORS.text.primary} !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: ${CORE_COLORS.surface.canvas} !important;\n background-color: ${CORE_COLORS.surface.canvas} !important;\n background-image: none !important;\n color: ${CORE_COLORS.text.strong} !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: ${CORE_COLORS.surface.canvas} !important;\n background-color: ${CORE_COLORS.surface.canvas} !important;\n background-image: none !important;\n color: ${CORE_COLORS.text.strong} !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: ${CORE_COLORS.text.strong} !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: ${CORE_COLORS.accent.highlightSoft} !important;\n background-color: ${CORE_COLORS.accent.highlightSoft} !important;\n background-image: none !important;\n color: ${CORE_COLORS.text.primary} !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: ${CORE_COLORS.accent.highlightSoft} !important;\n background-color: ${CORE_COLORS.accent.highlightSoft} !important;\n background-image: none !important;\n color: ${CORE_COLORS.text.primary} !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: ${CORE_COLORS.text.primary} !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: ${CORE_COLORS.text.primary} !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: ${CORE_COLORS.text.inverse} !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: ${CORE_COLORS.brand.primary} !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 ${CORE_COLORS.text.inverse};\n border-bottom: 2px solid ${CORE_COLORS.text.inverse};\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: ${CORE_COLORS.text.primary} !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: ${CORE_COLORS.brand.primary} !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 ${CORE_COLORS.text.muted} !important;\n border-radius: 2px !important;\n background: ${CORE_COLORS.text.inverse} !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: ${CORE_COLORS.brand.primary} !important;\n background: ${CORE_COLORS.brand.primary} !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 ${CORE_COLORS.text.inverse} !important;\n border-top: 0 !important;\n border-left: 0 !important;\n border-right: 2px solid ${CORE_COLORS.text.inverse} !important;\n border-bottom: 2px solid ${CORE_COLORS.text.inverse} !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: ${CORE_COLORS.brand.primary} !important;\n background: ${CORE_COLORS.brand.primary} !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: ${CORE_COLORS.text.inverse} !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: ${CORE_COLORS.text.primary} !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: ${CORE_COLORS.brand.primary} !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 ${CORE_COLORS.text.muted} !important;\n border-radius: 2px !important;\n background: ${CORE_COLORS.text.inverse} !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: ${CORE_COLORS.brand.primary} !important;\n background: ${CORE_COLORS.brand.primary} !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 ${CORE_COLORS.text.inverse} !important;\n border-bottom: 2px solid ${CORE_COLORS.text.inverse} !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: ${CORE_COLORS.brand.primary} !important;\n background: ${CORE_COLORS.brand.primary} !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: ${CORE_COLORS.text.inverse} !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: ${CORE_COLORS.text.primary} !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: ${CORE_COLORS.brand.primary} !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 ${CORE_COLORS.text.muted} !important;\n border-radius: 2px !important;\n background: ${CORE_COLORS.text.inverse} !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: ${CORE_COLORS.brand.primary} !important;\n background: ${CORE_COLORS.brand.primary} !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 ${CORE_COLORS.text.inverse} !important;\n border-bottom: 2px solid ${CORE_COLORS.text.inverse} !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: ${CORE_COLORS.brand.primary} !important;\n background: ${CORE_COLORS.brand.primary} !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: ${CORE_COLORS.text.inverse} !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: ${CORE_COLORS.brand.primary} !important;\n background: ${CORE_COLORS.brand.primary} !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 ${CORE_COLORS.text.inverse} !important;\n border-bottom: 2px solid ${CORE_COLORS.text.inverse} !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: ${CORE_COLORS.brand.primary} !important;\n background: ${CORE_COLORS.brand.primary} !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: ${CORE_COLORS.text.inverse} !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};\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';\nimport { CORE_COLORS } from '../../tokens/core';\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') {\n return;\n }\n\n const { button, input } = 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\n /* ── Trigger: base ───────────────────────────────── */\n\n .${DS_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: ${input.border.radius} !important;\n background-color: ${input.background.default} !important;\n box-shadow: none !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 transition: none !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: ${input.border.default} !important;\n box-shadow: none !important;\n }\n\n .${DS_PICKER_CLASS}.ant-picker.ant-picker-outlined {\n border-color: ${input.border.default} !important;\n box-shadow: none !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: ${input.border.hover} !important;\n box-shadow: none !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: ${input.border.focus} !important;\n border-width: ${input.border.widthFocus} !important;\n box-shadow: none !important;\n outline: none !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: ${input.border.focus} !important;\n border-width: ${input.border.widthFocus} !important;\n box-shadow: none !important;\n outline: none !important;\n }\n\n .${DS_PICKER_CLASS}.ant-picker:focus-within,\n .${DS_PICKER_CLASS}.ant-picker .ant-picker-input > input:focus,\n .${DS_PICKER_CLASS}.ant-picker .ant-picker-input > input:focus-visible {\n outline: none !important;\n box-shadow: none !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: ${input.border.error} !important;\n box-shadow: none !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: ${CORE_COLORS.status.warning} !important;\n box-shadow: none !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: ${input.border.success} !important;\n box-shadow: none !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: ${CORE_COLORS.text.strong} !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: ${CORE_COLORS.text.strong} !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 color-mix(in srgb, ${CORE_COLORS.text.primary} 30%, transparent) !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: ${CORE_COLORS.text.strong} !important;\n padding: 2px 0 !important;\n }\n\n .${DS_PICKER_PANEL_CLASS}.ant-picker-dropdown .ant-picker-cell-in-view {\n color: ${CORE_COLORS.text.strong} !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: ${CORE_COLORS.semantic.infoBg} !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 ${CORE_COLORS.text.strong} !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: ${CORE_COLORS.accent.highlightSoft} !important;\n background-color: ${CORE_COLORS.accent.highlightSoft} !important;\n border: 2px solid ${CORE_COLORS.accent.highlight} !important;\n color: ${CORE_COLORS.text.strong} !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: ${CORE_COLORS.accent.highlightSoft} !important;\n background-color: ${CORE_COLORS.accent.highlightSoft} !important;\n border: 2px solid ${CORE_COLORS.accent.highlight} !important;\n color: ${CORE_COLORS.text.strong} !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: ${CORE_COLORS.accent.highlightSoft} !important;\n background-color: ${CORE_COLORS.accent.highlightSoft} !important;\n border: 2px solid ${CORE_COLORS.accent.highlight} !important;\n color: ${CORE_COLORS.text.strong} !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: ${CORE_COLORS.accent.highlightSoft} !important;\n background-color: ${CORE_COLORS.accent.highlightSoft} !important;\n border: 2px solid ${CORE_COLORS.accent.highlight} !important;\n color: ${CORE_COLORS.text.strong} !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: ${CORE_COLORS.accent.highlightSoft} !important;\n background-color: ${CORE_COLORS.accent.highlightSoft} !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: ${CORE_COLORS.brand.primaryHover} !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: ${CORE_COLORS.accent.highlightBg} !important;\n color: ${CORE_COLORS.text.strong} !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: ${CORE_COLORS.accent.highlightBg} !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: ${CORE_COLORS.accent.highlightSoft} !important;\n border: 2px solid ${CORE_COLORS.accent.highlight} !important;\n color: ${CORE_COLORS.text.strong} !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: ${CORE_COLORS.accent.highlightSoft} !important;\n border: 2px solid ${CORE_COLORS.accent.highlight} !important;\n color: ${CORE_COLORS.text.strong} !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: ${CORE_COLORS.accent.highlightBg} !important;\n }\n\n `;\n\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 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 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') {\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 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 /* 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: ${input.border.radius} !important;\n background-color: ${input.background.default} !important;\n box-shadow: none !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: none !important;\n }\n\n .${DS_TIME_PICKER_CLASS}.ant-picker.ant-picker-outlined {\n border-color: ${input.border.default} !important;\n box-shadow: none !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: none !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 border-width: ${input.border.widthFocus} !important;\n box-shadow: none !important;\n background-color: ${input.background.focus} !important;\n outline: none !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 border-width: ${input.border.widthFocus} !important;\n box-shadow: none !important;\n outline: none !important;\n }\n\n .${DS_TIME_PICKER_CLASS}.ant-picker:focus-within,\n .${DS_TIME_PICKER_CLASS}.ant-picker .ant-picker-input > input:focus,\n .${DS_TIME_PICKER_CLASS}.ant-picker .ant-picker-input > input:focus-visible {\n outline: none !important;\n box-shadow: none !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: none !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: none !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: none !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: none !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};\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 classNames: providedClassNames,\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 (providedClassNames as any)?.popup?.root,\n providedPopupClassName,\n );\n const mergedClassNames = {\n ...(providedClassNames ?? {}),\n popup: {\n ...((providedClassNames as any)?.popup ?? {}),\n root: mergedPopupClassName,\n },\n } as TimePickerProps['classNames'];\n\n return (\n <AntTimePicker\n {...props}\n className={mergedClassName}\n classNames={mergedClassNames}\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 type { ComponentProps } from 'react';\nimport { useEffect } from 'react';\nimport { dsSemanticTokens } from '../../theme/ontadaTheme';\n\nconst STYLE_ID = 'ds-input-styles';\nconst DS_INPUT_CLASS = 'ds-input';\n\ntype ClassNameProp = { className?: string };\n\nconst withDsInputClass = <T extends ClassNameProp>(props: T): T => {\n const mergedClassName = `${DS_INPUT_CLASS} ${props.className ?? ''}`.trim();\n return { ...props, className: mergedClassName };\n};\n\nexport type InputProps = AntInputProps;\nexport type InputTextAreaProps = ComponentProps<typeof AntInput.TextArea>;\nexport type InputSearchProps = ComponentProps<typeof AntInput.Search>;\nexport type InputOTPProps = ComponentProps<typeof AntInput.OTP>;\n\nexport const Input = ({ className = '', ...props }: InputProps) => {\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 { 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-borderless,\n .ds-input.ant-input-affix-wrapper.ant-input-affix-wrapper-borderless,\n .ds-input.ant-input-underlined,\n .ds-input.ant-input-affix-wrapper.ant-input-affix-wrapper-underlined,\n .ds-input.ant-input-group-wrapper,\n .ds-input.ant-input-search,\n .ds-input.ant-space-compact.ant-input-search,\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 border-radius: ${input.border.radius} !important;\n background-color: ${input.background.default} !important;\n color: ${input.text.default} !important;\n transition: none !important;\n box-sizing: border-box !important;\n }\n\n .ds-input.ant-input-group-wrapper .ant-input-group-addon,\n .ds-input.ant-input-search .ant-input-search-button,\n .ds-input.ant-input-search .ant-input-search-btn {\n border-radius: ${input.border.radius} !important;\n }\n\n .ds-input.ant-input-search .ant-input-search-btn,\n .ds-input.ant-input-search .ant-input-search-button {\n border-top-left-radius: 0 !important;\n border-bottom-left-radius: 0 !important;\n border-top-right-radius: ${input.border.radius} !important;\n border-bottom-right-radius: ${input.border.radius} !important;\n }\n\n .ds-input.ant-input-group-wrapper .ant-input-group-addon:first-child {\n border-top-right-radius: 0 !important;\n border-bottom-right-radius: 0 !important;\n }\n\n .ds-input.ant-input-group-wrapper .ant-input-group-addon:last-child {\n border-top-left-radius: 0 !important;\n border-bottom-left-radius: 0 !important;\n }\n\n .ds-input.ant-input-group-wrapper .ant-input-group > .ant-input {\n border-radius: ${input.border.radius} !important;\n }\n\n .ds-input.ant-input-group-wrapper .ant-input-group > .ant-input,\n .ds-input.ant-input-group-wrapper .ant-input-group-addon,\n .ds-input.ant-input-search .ant-input,\n .ds-input.ant-input-search .ant-input-search-btn,\n .ds-input.ant-input-search .ant-input-search-button {\n border-color: ${input.border.default} !important;\n outline: none !important;\n box-shadow: none !important;\n transition: none !important;\n }\n\n .ds-input.ant-input-group-wrapper .ant-input-group > .ant-input,\n .ds-input.ant-input-search .ant-input {\n border-color: transparent !important;\n }\n\n .ds-input.ant-input-group-wrapper:focus-within {\n border-color: ${input.border.focus} !important;\n border-width: ${input.border.widthFocus} !important;\n border-style: solid !important;\n box-shadow: none !important;\n outline: none !important;\n }\n\n .ds-input.ant-space-compact.ant-input-search:focus-within {\n border-color: ${input.border.focus} !important;\n border-width: ${input.border.widthFocus} !important;\n border-style: solid !important;\n box-shadow: none !important;\n outline: none !important;\n }\n\n .ds-input.ant-input-group-wrapper:hover .ant-input-group-addon,\n .ds-input.ant-space-compact.ant-input-search:hover .ant-input,\n .ds-input.ant-input-search:hover .ant-input-search-btn,\n .ds-input.ant-space-compact.ant-input-search:hover .ant-input-search-btn,\n .ds-input.ant-input-search:hover .ant-input-search-button {\n border-color: ${input.border.hover} !important;\n }\n\n .ds-input.ant-input-group-wrapper:hover .ant-input-group > .ant-input,\n .ds-input.ant-input-search:hover .ant-input,\n .ds-input.ant-space-compact.ant-input-search:hover .ant-input {\n border-color: transparent !important;\n }\n\n .ds-input.ant-input-group-wrapper:focus-within .ant-input-group-addon,\n .ds-input.ant-space-compact.ant-input-search:focus-within .ant-input,\n .ds-input.ant-input-search:focus-within .ant-input-search-btn,\n .ds-input.ant-space-compact.ant-input-search:focus-within .ant-input-search-btn,\n .ds-input.ant-input-search:focus-within .ant-input-search-button {\n border-color: ${input.border.focus} !important;\n box-shadow: none !important;\n outline: none !important;\n }\n\n .ds-input.ant-input-group-wrapper:focus-within .ant-input-group > .ant-input,\n .ds-input.ant-input-search:focus-within .ant-input,\n .ds-input.ant-space-compact.ant-input-search:focus-within .ant-input {\n border-color: transparent !important;\n }\n\n .ds-input.ant-otp .ant-otp-input {\n border: ${input.border.widthDefault} solid ${input.border.default} !important;\n border-radius: ${input.border.radius} !important;\n box-shadow: none !important;\n outline: none !important;\n transition: none !important;\n background-color: ${input.background.default} !important;\n color: ${input.text.default} !important;\n }\n\n .ds-input.ant-otp .ant-otp-input:hover {\n border-color: ${input.border.hover} !important;\n }\n\n .ds-input.ant-otp .ant-otp-input:focus,\n .ds-input.ant-otp .ant-otp-input:focus-visible {\n border-color: ${input.border.focus} !important;\n box-shadow: none !important;\n outline: none !important;\n color: ${input.text.focus} !important;\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 border-style: solid !important;\n box-shadow: none !important;\n outline: none !important;\n color: ${input.text.focus} !important;\n font-weight: ${input.focusFontWeight} !important;\n }\n\n .ds-input.ant-input:focus-visible,\n .ds-input.ant-input-affix-wrapper:focus-visible,\n .ds-input.ant-input-affix-wrapper .ant-input:focus,\n .ds-input.ant-input-affix-wrapper .ant-input:focus-visible {\n outline: none !important;\n box-shadow: none !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 border: none !important;\n border-color: transparent !important;\n outline: none !important;\n box-shadow: none !important;\n background: transparent !important;\n padding: 0 !important;\n height: auto !important;\n min-height: 0 !important;\n }\n\n .ds-input.ant-input:focus,\n .ds-input.ant-input:focus-visible,\n .ds-input.ant-input:focus:hover,\n .ds-input.ant-input-focused,\n .ds-input.ant-input-focused:hover,\n .ds-input.ant-input-affix-wrapper-focused,\n .ds-input.ant-input-affix-wrapper-focused:hover,\n .ds-input.ant-input-affix-wrapper:focus,\n .ds-input.ant-input-affix-wrapper:focus-visible,\n .ds-input.ant-input-affix-wrapper:focus-within,\n .ds-input.ant-input-affix-wrapper:focus-within:hover,\n .ds-input.ant-input-group-wrapper:focus-within,\n .ds-input.ant-input-group-wrapper:focus-within:hover,\n .ds-input.ant-input-search:focus-within,\n .ds-input.ant-input-search:focus-within:hover,\n .ds-input.ant-space-compact.ant-input-search:focus-within,\n .ds-input.ant-space-compact.ant-input-search:focus-within:hover {\n border-color: ${input.border.focus} !important;\n border-width: ${input.border.widthFocus} !important;\n border-style: solid !important;\n box-shadow: none !important;\n outline: none !important;\n }\n\n .ds-input.ant-input-affix-wrapper:focus-within .ant-input,\n .ds-input.ant-input-affix-wrapper-focused .ant-input,\n .ds-input.ant-input-group-wrapper:focus-within .ant-input-group > .ant-input,\n .ds-input.ant-input-group-wrapper:focus-within .ant-input-group-addon,\n .ds-input.ant-input-search:focus-within .ant-input,\n .ds-input.ant-input-search:focus-within .ant-input-search-btn,\n .ds-input.ant-input-search:focus-within .ant-input-search-button,\n .ds-input.ant-space-compact.ant-input-search:focus-within .ant-input,\n .ds-input.ant-space-compact.ant-input-search:focus-within .ant-input-search-btn,\n .ds-input.ant-space-compact.ant-input-search:focus-within .ant-input-search-button {\n border-color: transparent !important;\n box-shadow: none !important;\n outline: none !important;\n }\n `;\n\n }\n }, []);\n\n const mergedClassName = `${DS_INPUT_CLASS} ${className}`.trim();\n\n return <AntInput {...props} className={mergedClassName} />;\n};\n\nInput.displayName = 'Input';\n\nexport const InputTextArea = (props: InputTextAreaProps) => {\n return <AntInput.TextArea {...withDsInputClass(props)} />;\n};\n\nInputTextArea.displayName = 'InputTextArea';\n\nexport const InputSearch = (props: InputSearchProps) => {\n return <AntInput.Search {...withDsInputClass(props)} />;\n};\n\nInputSearch.displayName = 'InputSearch';\n\nexport const InputOTP = (props: InputOTPProps) => {\n return <AntInput.OTP {...withDsInputClass(props)} />;\n};\n\nInputOTP.displayName = 'InputOTP';","import { dsSemanticTokens } from '../../theme/ontadaTheme';\n\nconst STYLE_ID = 'ds-input-number-control-styles';\n\nexport const ensureInputNumberStyles = () => {\n if (typeof document === 'undefined') {\n return;\n }\n\n const { input, table } = 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-input-number.ant-input-number,\n .ds-input-number-root.ant-space-compact,\n .ds-input-number.ant-input-number-outlined,\n .ds-input-number.ant-input-number-filled,\n .ds-input-number.ant-input-number-borderless,\n .ds-input-number.ant-input-number-underlined,\n .ds-input-number.ant-input-number-group-wrapper,\n .ds-input-number.ant-input-number-group-wrapper .ant-input-number,\n .ds-input-number.ant-input-number-affix-wrapper,\n .ds-input-number.ant-input-number-affix-wrapper .ant-input-number {\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 color: ${input.text.default} !important;\n box-shadow: none !important;\n outline: none !important;\n transition: none !important;\n }\n\n .ds-input-number-root.ant-space-compact {\n border-radius: 4px !important;\n overflow: hidden !important;\n }\n\n .ds-input-number-root.ant-space-compact .ant-space-addon.ant-input-number-addon,\n .ds-input-number-root.ant-space-compact .ant-input-number {\n border-color: transparent !important;\n border-radius: 0 !important;\n box-shadow: none !important;\n outline: none !important;\n transition: none !important;\n }\n\n .ds-input-number-root.ant-space-compact:hover .ant-space-addon.ant-input-number-addon,\n .ds-input-number-root.ant-space-compact:hover .ant-input-number {\n border-color: transparent !important;\n box-shadow: none !important;\n outline: none !important;\n }\n\n .ds-input-number-root.ant-space-compact:focus-within,\n .ds-input-number-root.ant-space-compact:focus-within:hover {\n border-color: ${input.border.focus} !important;\n border-width: ${input.border.widthFocus} !important;\n border-style: solid !important;\n box-shadow: none !important;\n outline: none !important;\n }\n\n .ds-input-number-root.ant-space-compact:focus-within .ant-space-addon.ant-input-number-addon,\n .ds-input-number-root.ant-space-compact:focus-within:hover .ant-space-addon.ant-input-number-addon,\n .ds-input-number-root.ant-space-compact:focus-within .ant-input-number,\n .ds-input-number-root.ant-space-compact:focus-within:hover .ant-input-number {\n border-color: transparent !important;\n box-shadow: none !important;\n outline: none !important;\n }\n\n .ds-input-number.ant-input-number:hover,\n .ds-input-number.ant-input-number-group-wrapper:hover,\n .ds-input-number.ant-input-number-group-wrapper:hover .ant-input-number,\n .ds-input-number.ant-input-number-affix-wrapper:hover,\n .ds-input-number.ant-input-number-affix-wrapper:hover .ant-input-number {\n border-color: ${input.border.hover} !important;\n box-shadow: none !important;\n outline: none !important;\n }\n\n .ds-input-number.ant-input-number:focus,\n .ds-input-number.ant-input-number:focus-visible,\n .ds-input-number.ant-input-number-focused,\n .ds-input-number.ant-input-number-focused:hover,\n .ds-input-number.ant-input-number:focus-within,\n .ds-input-number.ant-input-number:focus-within:hover,\n .ds-input-number.ant-input-number-group-wrapper:focus-within,\n .ds-input-number.ant-input-number-group-wrapper:focus-within:hover,\n .ds-input-number.ant-input-number-group-wrapper:focus-within .ant-input-number,\n .ds-input-number.ant-input-number-group-wrapper:focus-within:hover .ant-input-number,\n .ds-input-number.ant-input-number-affix-wrapper-focused,\n .ds-input-number.ant-input-number-affix-wrapper-focused:hover,\n .ds-input-number.ant-input-number-affix-wrapper:focus-within,\n .ds-input-number.ant-input-number-affix-wrapper:focus-within:hover,\n .ds-input-number.ant-input-number-affix-wrapper:focus-within .ant-input-number,\n .ds-input-number.ant-input-number-affix-wrapper:focus-within:hover .ant-input-number {\n border-color: ${input.border.focus} !important;\n border-width: ${input.border.widthFocus} !important;\n border-style: solid !important;\n box-shadow: none !important;\n outline: none !important;\n }\n\n .ds-input-number.ant-input-number .ant-input-number-input,\n .ds-input-number.ant-input-number-group-wrapper .ant-input-number-input,\n .ds-input-number.ant-input-number-affix-wrapper .ant-input-number-input {\n color: ${input.text.default} !important;\n }\n\n .ds-input-number.ant-input-number:focus-within .ant-input-number-input,\n .ds-input-number.ant-input-number-focused .ant-input-number-input,\n .ds-input-number.ant-input-number-group-wrapper:focus-within .ant-input-number-input,\n .ds-input-number.ant-input-number-affix-wrapper:focus-within .ant-input-number-input {\n color: ${input.text.focus} !important;\n font-weight: ${input.focusFontWeight} !important;\n }\n\n .ds-input-number.ant-input-number-group-wrapper .ant-input-number-group-addon {\n border-color: ${input.border.default} !important;\n border-radius: 4px !important;\n color: ${input.text.default} !important;\n box-shadow: none !important;\n transition: none !important;\n }\n\n .ds-input-number.ant-input-number-group-wrapper:focus-within .ant-input-number-group-addon,\n .ds-input-number.ant-input-number-group-wrapper:focus-within:hover .ant-input-number-group-addon {\n border-color: transparent !important;\n box-shadow: none !important;\n outline: none !important;\n }\n\n .ds-input-number.ant-input-number-disabled,\n .ds-input-number.ant-input-number-disabled:hover,\n .ds-input-number.ant-input-number-group-wrapper:has(.ant-input-number-disabled),\n .ds-input-number.ant-input-number-affix-wrapper-disabled,\n .ds-input-number.ant-input-number-affix-wrapper-disabled:hover {\n background-color: ${input.background.disabled} !important;\n border-color: transparent !important;\n color: ${input.text.disabled} !important;\n box-shadow: none !important;\n }\n\n .ds-input-number.ant-input-number-readonly,\n .ds-input-number.ant-input-number:has(.ant-input-number-input[readonly]),\n .ds-input-number.ant-input-number-group-wrapper:has(.ant-input-number-input[readonly]),\n .ds-input-number.ant-input-number-affix-wrapper:has(.ant-input-number-input[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-number.ant-input-number-status-error,\n .ds-input-number.ant-input-number-affix-wrapper-status-error,\n .ds-input-number.ant-input-number-group-wrapper-status-error,\n .ds-input-number.ant-input-number-group-wrapper-status-error .ant-input-number {\n border-color: ${input.border.error} !important;\n }\n\n .ds-input-number.ant-input-number-status-success,\n .ds-input-number.ant-input-number-affix-wrapper-status-success,\n .ds-input-number.ant-input-number-group-wrapper-status-success,\n .ds-input-number.ant-input-number-group-wrapper-status-success .ant-input-number {\n border-color: ${input.border.success} !important;\n }\n\n .ds-input-number.ant-input-number-sm {\n height: ${input.height.small} !important;\n min-height: ${input.height.small} !important;\n }\n\n .ds-input-number.ant-input-number {\n height: ${input.height.middle} !important;\n min-height: ${input.height.middle} !important;\n }\n\n .ds-input-number.ant-input-number-lg {\n height: ${input.height.large} !important;\n min-height: ${input.height.large} !important;\n }\n\n .ds-input-number.ant-input-number .ant-input-number-actions,\n .ds-input-number.ant-input-number .ant-input-number-action,\n .ds-input-number.ant-input-number-affix-wrapper .ant-input-number-actions,\n .ds-input-number.ant-input-number-affix-wrapper .ant-input-number-action {\n transition: none !important;\n }\n\n .ds-input-number.ant-input-number .ant-input-number-action,\n .ds-input-number.ant-input-number-affix-wrapper .ant-input-number-action {\n color: ${input.text.focus} !important;\n }\n\n .ds-input-number.ant-input-number .ant-input-number-action:hover,\n .ds-input-number.ant-input-number-affix-wrapper .ant-input-number-action:hover {\n background: ${table.surface.rowHover} !important;\n }\n\n .ds-input-number.ant-input-number.ant-input-number-mode-input .ant-input-number-action-up,\n .ds-input-number.ant-input-number.ant-input-number-mode-input .ant-input-number-action-down {\n height: 50% !important;\n }\n\n .ds-input-number.ant-input-number.ant-input-number-outlined .ant-input-number-actions,\n .ds-input-number.ant-input-number-affix-wrapper.ant-input-number-affix-wrapper-outlined .ant-input-number-actions {\n opacity: 1 !important;\n width: 22px !important;\n transition: none !important;\n }\n `;\n};","import { InputNumber as AntInputNumber } from 'antd';\nimport type { ComponentProps } from 'react';\nimport { useEffect } from 'react';\nimport { ensureInputNumberStyles } from './inputNumberStyles';\n\nconst DS_INPUT_NUMBER_CLASS = 'ds-input-number';\n\nexport type InputNumberProps = ComponentProps<typeof AntInputNumber>;\n\nexport const InputNumber = ({ className = '', rootClassName = '', ...props }: InputNumberProps) => {\n useEffect(() => {\n ensureInputNumberStyles();\n }, []);\n\n const mergedClassName = `${DS_INPUT_NUMBER_CLASS} ${className}`.trim();\n const mergedRootClassName = `${DS_INPUT_NUMBER_CLASS}-root ${rootClassName}`.trim();\n\n return <AntInputNumber {...props} className={mergedClassName} rootClassName={mergedRootClassName} />;\n};\n\nInputNumber.displayName = 'InputNumber';","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 transition: none !important;\n animation: none !important;\n }\n\n .ds-checkbox .ant-checkbox::after,\n .ds-checkbox .ant-checkbox .ant-checkbox-inner::after {\n transition: none !important;\n animation: none !important;\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-indeterminate):not(.ant-checkbox-disabled) .ant-checkbox-inner,\n .ds-checkbox .ant-checkbox:hover:not(.ant-checkbox-checked):not(.ant-checkbox-indeterminate):not(.ant-checkbox-disabled) .ant-checkbox-inner,\n .ds-checkbox .ant-checkbox:active:not(.ant-checkbox-checked):not(.ant-checkbox-indeterminate):not(.ant-checkbox-disabled) .ant-checkbox-inner {\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.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 .ds-checkbox.ds-checkbox-status-error .ant-checkbox:active:not(.ant-checkbox-checked):not(.ant-checkbox-indeterminate):not(.ant-checkbox-disabled) .ant-checkbox-inner {\n border-color: ${checkbox.border.error};\n border-width: ${checkbox.borderWidth.default}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 .ds-checkbox.ds-checkbox-status-error .ant-checkbox.ant-checkbox-checked:active .ant-checkbox-inner,\n .ds-checkbox.ds-checkbox-status-error .ant-checkbox.ant-checkbox-indeterminate:active .ant-checkbox-inner {\n border-color: ${checkbox.border.error};\n background-color: ${checkbox.background.errorChecked};\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 transition: none !important;\n animation: none !important;\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 .ds-checkbox .ant-checkbox:active:not(.ant-checkbox-checked):not(.ant-checkbox-indeterminate):not(.ant-checkbox-disabled) {\n border-color: ${checkbox.border.default} !important;\n border-width: ${checkbox.borderWidth.default}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-checked {\n border-color: transparent !important;\n background-color: ${checkbox.background.checked} !important;\n }\n\n .ds-checkbox .ant-checkbox.ant-checkbox-checked::after {\n border-color: ${checkbox.mark.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 .ds-checkbox.ds-checkbox-status-error .ant-checkbox.ant-checkbox-checked,\n .ds-checkbox.ds-checkbox-status-error .ant-checkbox.ant-checkbox-indeterminate {\n border-color: ${checkbox.border.error} !important;\n background-color: ${checkbox.background.errorChecked} !important;\n }\n\n .ds-checkbox.ds-checkbox-status-error .ant-checkbox.ant-checkbox-checked::after {\n border-color: ${checkbox.mark.checked} !important;\n }\n\n .ds-checkbox .ant-checkbox.ant-checkbox-disabled.ant-checkbox-checked,\n .ds-checkbox .ant-checkbox.ant-checkbox-disabled.ant-checkbox-indeterminate,\n .ds-checkbox.ant-checkbox-wrapper-disabled .ant-checkbox.ant-checkbox-checked,\n .ds-checkbox.ant-checkbox-wrapper-disabled .ant-checkbox.ant-checkbox-indeterminate {\n border-color: transparent !important;\n background-color: ${checkbox.background.disabled} !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: dsSemanticTokens.tag.status.error.outline.text,\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: dsSemanticTokens.tag.status.error.outline.text,\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 { CORE_COLORS } from '../../tokens/core';\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: CORE_COLORS.status.errorDark,\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 { CORE_COLORS } from '../../tokens/core';\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: CORE_COLORS.status.errorDark,\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 { CORE_COLORS } from '../../tokens/core';\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: CORE_COLORS.status.errorDark,\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 { useId } from 'react';\nimport type { CSSProperties, ReactNode } from 'react';\nimport { CORE_COLORS } from '../../tokens/core';\nimport { Select } from './Select';\nimport type { DSSelectProps } from './Select';\n\ntype AntSelectProps = DSSelectProps;\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: CORE_COLORS.status.errorDark,\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 const generatedId = useId();\n const selectId = providedId ?? generatedId;\n const resolvedSelectProps = selectProps;\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 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 { CORE_COLORS } from '../../tokens/core';\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: CORE_COLORS.status.error,\n};\n\nconst requiredIndicatorStyle: CSSProperties = {\n fontSize: 12,\n lineHeight: '16px',\n fontWeight: 600,\n color: CORE_COLORS.status.errorDark,\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 { CORE_COLORS } from '../../tokens/core';\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: CORE_COLORS.status.errorDark,\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 { CORE_COLORS } from '../../tokens/core';\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: CORE_COLORS.text.primary,\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: CORE_COLORS.status.successDark,\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 { CORE_COLORS } from '../../tokens/core';\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: CORE_COLORS.text.primary,\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: CORE_COLORS.status.warningDark,\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 type { CSSProperties, ReactNode } from 'react';\nimport { FieldShell } from './FieldShell';\nimport type { ClearConfig, ClearVisibility } from './clearUtils';\nimport { Select } from './Select';\nimport type { DSSelectProps } from './Select';\n\ntype SelectProps = DSSelectProps;\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 const resolvedSelectProps = selectProps;\n\n const clearValue = clearToValue === undefined ? undefined : clearToValue;\n const clearAction = clear?.onClear ?? onClear;\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 {...resolvedSelectProps}\n id={id}\n value={value}\n onChange={(nextValue, option) => {\n resolvedSelectProps.onChange?.(nextValue, option);\n onValueChange?.(nextValue);\n }}\n style={{ width: '100%', ...resolvedSelectProps.style }}\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 type { CSSProperties, ReactNode } from 'react';\nimport { FieldShell } from './FieldShell';\nimport type { ClearConfig, ClearVisibility } from './clearUtils';\nimport { InputNumber } from './InputNumber';\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';\nimport { DS_SELECT_CLASS, ensureSelectStyles, mergeClassNames } from './selectStyles';\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 ensureSelectStyles();\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,\n .${DS_CASCADER_CLASS}.ant-select .ant-select-selector,\n .${DS_CASCADER_CLASS} .ant-select-selector {\n border-radius: 4px !important;\n }\n\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 = mergeClassNames(DS_CASCADER_CLASS, DS_SELECT_CLASS, props.className);\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') {\n return;\n }\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 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,\n .${DS_AUTOCOMPLETE_CLASS}.ant-select .ant-select-selector,\n .${DS_AUTOCOMPLETE_CLASS} .ant-select-selector {\n border-radius: 4px !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} .ant-input,\n .${DS_AUTOCOMPLETE_CLASS}.ant-select .ant-input,\n .${DS_AUTOCOMPLETE_CLASS} input,\n .${DS_AUTOCOMPLETE_CLASS} textarea {\n font-family: ${FONT_FAMILY} !important;\n }\n `;\n\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';\nimport { DS_SELECT_CLASS, ensureSelectStyles } from './selectStyles';\n\nexport type AutoCompleteProps = ComponentProps<typeof AntAutoComplete>;\n\nexport const AutoComplete = ({ className, style, ...props }: AutoCompleteProps) => {\n useEffect(() => {\n ensureSelectStyles();\n ensureAutoCompleteStyles();\n }, []);\n\n return (\n <AntAutoComplete\n {...props}\n className={mergeAutoCompleteClassNames(DS_AUTOCOMPLETE_CLASS, DS_SELECT_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';\nimport { DS_SELECT_CLASS, ensureSelectStyles } from './selectStyles';\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 ensureSelectStyles();\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, DS_SELECT_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 { 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\nexport function ensureTooltipStyles() {\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 {\n --ant-tooltip-arrow-background-color: ${tooltip.surface.background};\n }\n\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 }\n\n .ds-tooltip-overlay .ant-tooltip-arrow::before {\n background: ${tooltip.surface.background};\n }\n\n .ds-tooltip-overlay.ant-tooltip-placement-left > .ant-tooltip-arrow,\n .ds-tooltip-overlay.ant-tooltip-placement-leftTop > .ant-tooltip-arrow,\n .ds-tooltip-overlay.ant-tooltip-placement-leftBottom > .ant-tooltip-arrow {\n inset-inline-end: 0;\n }\n\n .ds-tooltip-overlay.ant-tooltip-placement-right > .ant-tooltip-arrow,\n .ds-tooltip-overlay.ant-tooltip-placement-rightTop > .ant-tooltip-arrow,\n .ds-tooltip-overlay.ant-tooltip-placement-rightBottom > .ant-tooltip-arrow {\n inset-inline-start: 0;\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 ensureTooltipStyles();\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 { Pagination as AntPagination, type PaginationProps as AntPaginationProps } from 'antd';\nimport { Icon } from '../../utils/icons';\nimport { dsSemanticTokens } from '../../theme/ontadaTheme';\nimport { Tooltip as DSTooltip } from '../display/Tooltip';\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 * Breakpoint where DS responsive pagination switches to the compact mobile truncation pattern.\n * @default 768\n */\n dsResponsiveBreakpoint?: number;\n /**\n * Shows DS truncation jumper affordance for ellipsis controls.\n * @default true\n */\n dsShowTruncationJumper?: boolean;\n /**\n * Number of pages advanced when a truncation jumper is clicked.\n * @default 3\n */\n dsTruncationJumpSize?: number;\n /**\n * Delay in seconds before the truncation jumper tooltip appears.\n * @default 3\n */\n dsTruncationTooltipDelay?: number;\n /**\n * Tooltip label shown when hovering a truncation jumper.\n * @default 'Jump 3 pages'\n */\n dsTruncationTooltipLabel?: string;\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 width: 28px !important;\n height: 28px !important;\n min-width: 28px !important;\n padding: 0 !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 .ds-pagination-jump-button {\n display: inline-flex !important;\n align-items: center !important;\n justify-content: center !important;\n width: 28px !important;\n min-width: 28px !important;\n height: 28px !important;\n margin: 0 !important;\n padding: 0 !important;\n border: 0 !important;\n background: transparent !important;\n color: ${pagination.text.default} !important;\n font: inherit !important;\n line-height: ${pagination.typography.jump.lineHeight} !important;\n cursor: pointer !important;\n }\n\n .ds-pagination .ds-pagination-jump-icon {\n display: none !important;\n align-items: center !important;\n justify-content: center !important;\n width: 8px !important;\n height: 8px !important;\n color: ${pagination.text.default} !important;\n line-height: 1 !important;\n }\n\n .ds-pagination .ds-pagination-jump-icon svg {\n width: 8px !important;\n height: 8px !important;\n display: block !important;\n }\n\n .ds-pagination .ds-pagination-truncation-icon {\n display: inline-flex !important;\n align-items: center !important;\n justify-content: center !important;\n width: 28px !important;\n height: 28px !important;\n color: ${pagination.text.default} !important;\n line-height: 1 !important;\n }\n\n .ds-pagination .ds-pagination-truncation-icon svg {\n width: 24px !important;\n height: 24px !important;\n display: block !important;\n }\n\n .ds-pagination .ant-pagination-jump-prev:hover,\n .ds-pagination .ant-pagination-jump-next:hover,\n .ds-pagination .ant-pagination-jump-prev:focus-within,\n .ds-pagination .ant-pagination-jump-next:focus-within {\n background: ${pagination.surface.hoverBg} !important;\n }\n\n .ds-pagination .ant-pagination-jump-prev:hover .ds-pagination-truncation-icon,\n .ds-pagination .ant-pagination-jump-next:hover .ds-pagination-truncation-icon,\n .ds-pagination .ds-pagination-jump-button:focus-visible .ds-pagination-truncation-icon {\n display: none !important;\n }\n\n .ds-pagination .ant-pagination-jump-prev:hover .ds-pagination-jump-icon,\n .ds-pagination .ant-pagination-jump-next:hover .ds-pagination-jump-icon,\n .ds-pagination .ds-pagination-jump-button:focus-visible .ds-pagination-jump-icon {\n display: inline-flex !important;\n }\n\n .ds-pagination-jumper-tooltip.ds-tooltip-overlay .ant-tooltip-container {\n min-width: 0 !important;\n max-width: none !important;\n padding: 6px 12px 5px !important;\n border-radius: ${dsSemanticTokens.tooltip.radius} !important;\n background: ${dsSemanticTokens.tooltip.surface.background} !important;\n filter: none !important;\n box-shadow: none !important;\n }\n\n .ds-pagination-jumper-tooltip.ds-tooltip-overlay {\n filter: drop-shadow(0px 2px 4px rgba(38, 44, 54, 0.3)) !important;\n --ant-tooltip-arrow-background-color: ${dsSemanticTokens.tooltip.surface.background};\n overflow: visible !important;\n }\n\n .ds-pagination-jumper-tooltip.ds-tooltip-overlay .ant-tooltip-content {\n overflow: visible !important;\n }\n\n .ds-pagination-jumper-tooltip.ds-tooltip-overlay .ds-tooltip-body {\n color: ${dsSemanticTokens.tooltip.surface.body} !important;\n font-size: ${dsSemanticTokens.tooltip.typography.body.fontSize} !important;\n line-height: ${dsSemanticTokens.tooltip.typography.body.lineHeight} !important;\n font-weight: ${dsSemanticTokens.tooltip.typography.body.fontWeight} !important;\n white-space: nowrap !important;\n }\n\n .ds-pagination-jumper-tooltip.ds-tooltip-overlay.ant-tooltip-placement-top > .ant-tooltip-arrow {\n display: none !important;\n }\n\n .ds-pagination-jumper-tooltip.ds-tooltip-overlay.ant-tooltip-placement-top .ant-tooltip-container {\n position: relative !important;\n overflow: visible !important;\n }\n\n .ds-pagination-jumper-tooltip.ds-tooltip-overlay.ant-tooltip-placement-top .ant-tooltip-container::after {\n content: '' !important;\n position: absolute !important;\n left: 50% !important;\n bottom: -9px !important;\n width: 0 !important;\n height: 0 !important;\n border-left: 8px solid transparent !important;\n border-right: 8px solid transparent !important;\n border-top: 9px solid ${dsSemanticTokens.tooltip.surface.background} !important;\n transform: translateX(-50%) !important;\n filter: drop-shadow(0px 2px 1px rgba(38, 44, 54, 0.3)) !important;\n pointer-events: none !important;\n }\n\n .ds-pagination .ds-pagination-jump-button:focus-visible {\n outline: 2px solid ${pagination.text.default} !important;\n outline-offset: 2px !important;\n border-radius: ${pagination.radius.jump} !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 dsResponsiveBreakpoint = 768,\n dsShowTruncationJumper = true,\n dsTruncationJumpSize = 3,\n dsTruncationTooltipDelay = 3,\n dsTruncationTooltipLabel,\n showQuickJumper = false,\n showSizeChanger = false,\n simple = false,\n className,\n current,\n defaultCurrent = 1,\n pageSize,\n defaultPageSize = 10,\n total = 0,\n showLessItems,\n onChange,\n onShowSizeChange,\n itemRender: providedItemRender,\n locale,\n ...antProps\n}) => {\n const [internalCurrent, setInternalCurrent] = React.useState(defaultCurrent);\n const [internalPageSize, setInternalPageSize] = React.useState(defaultPageSize);\n const [isCompactResponsive, setIsCompactResponsive] = React.useState(false);\n\n useEffect(() => {\n injectStyles();\n }, []);\n\n useEffect(() => {\n if (!dsResponsive || typeof window === 'undefined') return;\n\n const updateResponsiveMode = () => {\n setIsCompactResponsive(window.innerWidth <= dsResponsiveBreakpoint);\n };\n\n updateResponsiveMode();\n window.addEventListener('resize', updateResponsiveMode);\n\n return () => {\n window.removeEventListener('resize', updateResponsiveMode);\n };\n }, [dsResponsive, dsResponsiveBreakpoint]);\n\n const resolvedCurrent = current ?? internalCurrent;\n const resolvedPageSize = pageSize ?? internalPageSize;\n const resolvedShowLessItems = showLessItems ?? (dsResponsive && isCompactResponsive);\n const totalPages = Math.max(1, Math.ceil(total / resolvedPageSize));\n const truncationTooltipLabel = dsTruncationTooltipLabel ?? `Jump ${dsTruncationJumpSize} pages`;\n const resolvedLocale = React.useMemo(() => {\n if (!dsShowTruncationJumper) return locale;\n\n return {\n ...locale,\n prev_3: truncationTooltipLabel,\n next_3: truncationTooltipLabel,\n prev_5: truncationTooltipLabel,\n next_5: truncationTooltipLabel,\n };\n }, [dsShowTruncationJumper, locale, truncationTooltipLabel]);\n\n const changePage = React.useCallback((nextPage: number) => {\n const clampedPage = Math.min(totalPages, Math.max(1, nextPage));\n if (current == null) {\n setInternalCurrent(clampedPage);\n }\n onChange?.(clampedPage, resolvedPageSize);\n }, [current, onChange, resolvedPageSize, totalPages]);\n\n const handlePaginationChange = React.useCallback((nextPage: number, nextPageSize: number) => {\n if (current == null) {\n setInternalCurrent(nextPage);\n }\n if (pageSize == null) {\n setInternalPageSize(nextPageSize);\n }\n onChange?.(nextPage, nextPageSize);\n }, [current, onChange, pageSize]);\n\n const handleShowSizeChange = React.useCallback((nextPage: number, nextPageSize: number) => {\n if (current == null) {\n setInternalCurrent(nextPage);\n }\n if (pageSize == null) {\n setInternalPageSize(nextPageSize);\n }\n onShowSizeChange?.(nextPage, nextPageSize);\n }, [current, onShowSizeChange, pageSize]);\n\n const renderJumpItem = React.useCallback((type: 'jump-prev' | 'jump-next') => {\n const isPrevious = type === 'jump-prev';\n const targetPage = isPrevious\n ? resolvedCurrent - dsTruncationJumpSize\n : resolvedCurrent + dsTruncationJumpSize;\n\n const jumpButton = (\n <button\n type=\"button\"\n className=\"ds-pagination-jump-button\"\n aria-label={truncationTooltipLabel}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n changePage(targetPage);\n }}\n onKeyDown={(event) => {\n event.stopPropagation();\n }}\n >\n <span className=\"ds-pagination-truncation-icon\" aria-hidden=\"true\">\n <Icon\n name=\"moreOptionHorizontal2\"\n size={28}\n style={{ color: 'inherit' }}\n />\n </span>\n <span className=\"ds-pagination-jump-icon\" aria-hidden=\"true\">\n <Icon\n name={isPrevious ? 'arrowButtonLeft1' : 'arrowButtonRight1'}\n size={8}\n style={{ color: 'inherit' }}\n />\n </span>\n </button>\n );\n\n return (\n <DSTooltip\n dsSize=\"mini\"\n dsBody={truncationTooltipLabel}\n mouseEnterDelay={dsTruncationTooltipDelay}\n placement=\"top\"\n classNames={{ root: 'ds-pagination-jumper-tooltip' }}\n >\n {jumpButton}\n </DSTooltip>\n );\n }, [changePage, dsTruncationJumpSize, dsTruncationTooltipDelay, resolvedCurrent, truncationTooltipLabel]);\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 if ((type === 'jump-prev' || type === 'jump-next') && dsShowTruncationJumper) {\n return renderJumpItem(type);\n }\n\n if (providedItemRender) {\n return providedItemRender(_, type, originalElement);\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 current={resolvedCurrent}\n pageSize={resolvedPageSize}\n total={total}\n showLessItems={resolvedShowLessItems}\n showQuickJumper={showQuickJumper}\n showSizeChanger={showSizeChanger}\n simple={simple}\n locale={resolvedLocale}\n itemRender={itemRender}\n onChange={handlePaginationChange}\n onShowSizeChange={handleShowSizeChange}\n {...antProps}\n />\n );\n};\n\nexport default Pagination;\n","import { CORE_COLORS } from '../../tokens/core';\n\nconst 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: ${CORE_COLORS.status.success};\n --ds-steps-progress: ${CORE_COLORS.text.muted};\n --ds-steps-next: ${CORE_COLORS.text.disabled};\n --ds-steps-line-complete: ${CORE_COLORS.text.muted};\n --ds-steps-line-wait: ${CORE_COLORS.surface.divider};\n --ds-steps-text: ${CORE_COLORS.text.primary};\n --ds-steps-error: ${CORE_COLORS.status.errorDark};\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-vertical .ant-steps-item-rail {\n inset-inline-start: 12px !important;\n top: 24px !important;\n bottom: 0 !important;\n width: 2px !important;\n border-inline-start-width: 2px !important;\n }\n\n .${DS_STEPS_CLASS}.ant-steps.ant-steps-vertical.ant-steps-small .ant-steps-item-rail {\n inset-inline-start: 8px !important;\n top: 16px !important;\n bottom: 0 !important;\n width: 2px !important;\n border-inline-start-width: 2px !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: 12px !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: 13px !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: 8px !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: 9px !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: ${CORE_COLORS.text.inverse} !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: ${CORE_COLORS.text.inverse} !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: ${CORE_COLORS.text.inverse} !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: ${CORE_COLORS.text.inverse} !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: ${CORE_COLORS.text.inverse} !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: ${CORE_COLORS.text.secondary} !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';\nexport type DSTabsVariant = 'line' | 'segmented-light';\n\nexport type TabsProps = AntTabsProps & {\n /** DS visual variant. */\n dsVariant?: DSTabsVariant;\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 segmentedMinWidth: string;\n}> = {\n sm: {\n tabHeight: '26px',\n fontSize: '12px',\n lineHeight: '16px',\n letterSpacingActive: '0.54px',\n letterSpacingInactive: '0.48px',\n segmentedMinWidth: '104px',\n },\n md: {\n tabHeight: '40px',\n fontSize: '14px',\n lineHeight: '18px',\n letterSpacingActive: '0.56px',\n letterSpacingInactive: '0.49px',\n segmentedMinWidth: '132px',\n },\n lg: {\n tabHeight: '44px',\n fontSize: '16px',\n lineHeight: '20px',\n letterSpacingActive: '0.56px',\n letterSpacingInactive: '0.48px',\n segmentedMinWidth: '160px',\n },\n};\n\nfunction injectStyles() {\n if (typeof document === 'undefined') return;\n if (document.getElementById(STYLE_ID)) return;\n\n const { tabs, segmented } = 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 [data-ds-tabs][data-ds-variant='segmented-light'].ant-tabs-top > .ant-tabs-nav {\n display: inline-flex;\n width: fit-content;\n max-width: 100%;\n flex: 0 0 auto;\n padding: 4px;\n background: ${segmented.container.background};\n border: none;\n border-radius: 8px;\n box-shadow: none;\n }\n\n [data-ds-tabs][data-ds-variant='segmented-light'].ant-tabs-top > .ant-tabs-nav::before {\n border-bottom: none;\n }\n\n [data-ds-tabs][data-ds-variant='segmented-light'].ant-tabs-top > .ant-tabs-nav .ant-tabs-nav-wrap,\n [data-ds-tabs][data-ds-variant='segmented-light'].ant-tabs-top > .ant-tabs-nav .ant-tabs-nav-list {\n width: auto;\n flex: 0 0 auto;\n max-width: 100%;\n }\n\n [data-ds-tabs][data-ds-variant='segmented-light'].ant-tabs-top .ant-tabs-nav-list {\n gap: 4px;\n align-items: center;\n }\n\n [data-ds-tabs][data-ds-variant='segmented-light'].ant-tabs-top .ant-tabs-tab {\n min-width: var(--ds-tabs-segmented-min-width);\n height: var(--ds-tabs-height);\n padding: 0 16px;\n justify-content: center;\n border-radius: 6px;\n border: 1px solid transparent;\n background: transparent;\n }\n\n [data-ds-tabs][data-ds-variant='segmented-light'].ant-tabs-top .ant-tabs-tab-btn {\n color: ${segmented.text.inactive};\n font-weight: ${segmented.typography.fontWeight};\n letter-spacing: 0;\n text-transform: none;\n }\n\n [data-ds-tabs][data-ds-variant='segmented-light'][data-ds-size='sm'].ant-tabs-top .ant-tabs-tab-btn {\n font-size: ${SIZE_TOKENS.md.fontSize};\n line-height: ${SIZE_TOKENS.md.lineHeight};\n }\n\n [data-ds-tabs][data-ds-variant='segmented-light'].ant-tabs-top .ant-tabs-tab.ant-tabs-tab-active {\n background: ${segmented.item.selectedBackground};\n border-color: transparent;\n }\n\n [data-ds-tabs][data-ds-variant='segmented-light'].ant-tabs-top .ant-tabs-tab.ant-tabs-tab-active .ant-tabs-tab-btn {\n color: ${tabs.text.active};\n font-weight: 700;\n letter-spacing: 0;\n }\n\n [data-ds-tabs][data-ds-variant='segmented-light'].ant-tabs-top .ant-tabs-ink-bar {\n display: none;\n }\n\n [data-ds-tabs][data-ds-variant='segmented-light'].ant-tabs-top > .ant-tabs-content-holder {\n margin-top: 16px;\n }\n\n [data-ds-tabs][data-ds-variant='segmented-light'][data-ds-layout='equal-width'].ant-tabs-top > .ant-tabs-nav {\n display: flex;\n width: 100%;\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 dsVariant = 'line',\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 ['--ds-tabs-segmented-min-width' as string]: tokens.segmentedMinWidth,\n }}\n data-ds-tabs\n data-ds-variant={dsVariant}\n data-ds-size={dsSize}\n data-ds-layout={dsLayout}\n data-ds-underline={dsUnderline ? 'true' : 'false'}\n />\n </div>\n );\n};\n","import { CORE_COLORS } from '../../tokens/core';\n\nconst STYLE_ID = 'ds-dropdown-styles';\n\nexport const DS_DROPDOWN_MENU_CLASS = 'ds-dropdown-menu';\n\nexport const mergeDropdownClassNames = (...classNames: Array<string | undefined>): string =>\n classNames.filter(Boolean).join(' ').trim();\n\nexport const ensureDropdownStyles = () => {\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_DROPDOWN_MENU_CLASS}.ant-dropdown {\n border: 1px solid ${CORE_COLORS.text.primary} !important;\n border-radius: 4px !important;\n background: ${CORE_COLORS.text.inverse} !important;\n box-shadow: 0 4px 4px color-mix(in srgb, ${CORE_COLORS.text.primary} 15%, transparent) !important;\n overflow: hidden !important;\n padding: 0 !important;\n }\n\n .${DS_DROPDOWN_MENU_CLASS}.ant-dropdown .ant-dropdown-menu {\n margin: 0 !important;\n padding: 0 !important;\n border-radius: 0 !important;\n background: ${CORE_COLORS.text.inverse} !important;\n box-shadow: none !important;\n }\n\n .${DS_DROPDOWN_MENU_CLASS}.ant-dropdown .ant-dropdown-menu-item,\n .${DS_DROPDOWN_MENU_CLASS}.ant-dropdown .ant-dropdown-menu-submenu-title {\n min-height: 34px !important;\n padding: 8px 16px !important;\n border-bottom: 1px solid ${CORE_COLORS.text.disabled} !important;\n border-radius: 0 !important;\n color: ${CORE_COLORS.text.primary} !important;\n background: ${CORE_COLORS.text.inverse} !important;\n font-family: var(--ant-font-family, 'Nunito', sans-serif) !important;\n font-size: 14px !important;\n line-height: 18px !important;\n transition: none !important;\n }\n\n .${DS_DROPDOWN_MENU_CLASS}.ant-dropdown .ant-dropdown-menu-item:last-child,\n .${DS_DROPDOWN_MENU_CLASS}.ant-dropdown .ant-dropdown-menu-submenu:last-child > .ant-dropdown-menu-submenu-title,\n .${DS_DROPDOWN_MENU_CLASS}.ant-dropdown .ant-dropdown-menu-submenu:last-child .ant-dropdown-menu .ant-dropdown-menu-item:last-child,\n .${DS_DROPDOWN_MENU_CLASS}.ant-dropdown .ant-dropdown-menu-submenu:last-child .ant-dropdown-menu .ant-dropdown-menu-submenu:last-child > .ant-dropdown-menu-submenu-title {\n border-bottom: 0 !important;\n }\n\n .${DS_DROPDOWN_MENU_CLASS}.ant-dropdown .ant-dropdown-menu-item:hover,\n .${DS_DROPDOWN_MENU_CLASS}.ant-dropdown .ant-dropdown-menu-item-active,\n .${DS_DROPDOWN_MENU_CLASS}.ant-dropdown .ant-dropdown-menu-submenu-title:hover,\n .${DS_DROPDOWN_MENU_CLASS}.ant-dropdown .ant-dropdown-menu-submenu-active > .ant-dropdown-menu-submenu-title {\n background: ${CORE_COLORS.surface.canvas} !important;\n color: ${CORE_COLORS.text.strong} !important;\n font-weight: 600 !important;\n }\n\n .${DS_DROPDOWN_MENU_CLASS}.ant-dropdown .ant-dropdown-menu-item-selected,\n .${DS_DROPDOWN_MENU_CLASS}.ant-dropdown .ant-dropdown-menu-submenu-selected > .ant-dropdown-menu-submenu-title {\n background: ${CORE_COLORS.accent.highlightSoft} !important;\n color: ${CORE_COLORS.text.strong} !important;\n font-weight: 600 !important;\n position: relative;\n }\n\n .${DS_DROPDOWN_MENU_CLASS}.ant-dropdown .ant-dropdown-menu-item-selected:hover,\n .${DS_DROPDOWN_MENU_CLASS}.ant-dropdown .ant-dropdown-menu-item-selected.ant-dropdown-menu-item-active,\n .${DS_DROPDOWN_MENU_CLASS}.ant-dropdown .ant-dropdown-menu-submenu-selected > .ant-dropdown-menu-submenu-title:hover,\n .${DS_DROPDOWN_MENU_CLASS}.ant-dropdown .ant-dropdown-menu-submenu-selected.ant-dropdown-menu-submenu-active > .ant-dropdown-menu-submenu-title {\n background: ${CORE_COLORS.accent.highlightSoft} !important;\n color: ${CORE_COLORS.text.strong} !important;\n font-weight: 600 !important;\n }\n\n .${DS_DROPDOWN_MENU_CLASS}.ant-dropdown .ant-dropdown-menu-item-selected::before {\n content: '';\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n width: 4px;\n background: ${CORE_COLORS.accent.highlight};\n }\n\n .${DS_DROPDOWN_MENU_CLASS}.ant-dropdown .ant-dropdown-menu-item-danger,\n .${DS_DROPDOWN_MENU_CLASS}.ant-dropdown .ant-dropdown-menu-item-danger:hover,\n .${DS_DROPDOWN_MENU_CLASS}.ant-dropdown .ant-dropdown-menu-item-danger.ant-dropdown-menu-item-active {\n color: ${CORE_COLORS.status.errorDark} !important;\n }\n\n .${DS_DROPDOWN_MENU_CLASS}.ant-dropdown .ant-dropdown-menu-item-divider,\n .${DS_DROPDOWN_MENU_CLASS}.ant-dropdown .ant-dropdown-menu-submenu .ant-dropdown-menu-item-divider {\n margin: 0 !important;\n background: ${CORE_COLORS.text.disabled} !important;\n }\n `;\n\n document.head.appendChild(style);\n};\n","import { Dropdown as AntDropdown } from 'antd';\nimport type { DropdownProps as AntDropdownProps } from 'antd';\nimport { useEffect } from 'react';\nimport {\n DS_DROPDOWN_MENU_CLASS,\n ensureDropdownStyles,\n mergeDropdownClassNames,\n} from './dropdownStyles';\n\nexport type DropdownProps = AntDropdownProps;\n\nexport const Dropdown = ({\n classNames: providedClassNames,\n overlayClassName,\n ...props\n}: DropdownProps) => {\n useEffect(() => {\n ensureDropdownStyles();\n }, []);\n\n const mergedRootClassName = mergeDropdownClassNames(\n DS_DROPDOWN_MENU_CLASS,\n (providedClassNames as any)?.root,\n overlayClassName,\n );\n\n const mergedClassNames = {\n ...(providedClassNames ?? {}),\n root: mergedRootClassName,\n } as AntDropdownProps['classNames'];\n\n return <AntDropdown {...props} classNames={mergedClassNames} />;\n};\n\nDropdown.displayName = 'Dropdown';\n","import { Badge as AntBadge } from 'antd';\nimport type { BadgeProps as AntBadgeProps } from 'antd';\nimport type { CSSProperties, FC } from 'react';\nimport { useEffect } from 'react';\nimport { dsSemanticTokens } from '../../theme/ontadaTheme';\n\nexport type DSBadgeStatus = 'neutral' | 'success' | 'warning' | 'error' | 'processing' | 'inactive' | 'new' | 'custom';\nexport type DSBadgeVariant = 'solid' | 'light' | 'outline';\nexport type DSBadgeSize = 'sm' | 'md' | 'lg';\n\ntype RestrictedAntBadgeProps = 'color' | 'status' | 'size';\ntype RestrictedAntRibbonProps = 'color';\ntype AntRibbonProps = Parameters<typeof AntBadge.Ribbon>[0];\n\ntype DSBadgePalette = {\n bg?: string;\n text: string;\n border?: string;\n};\n\ntype DSBadgeCustomColors = {\n text?: string;\n background?: string;\n border?: string;\n};\n\nexport type BadgeProps = Omit<AntBadgeProps, RestrictedAntBadgeProps> & {\n /** DS semantic status — drives count, dot, status text, and ribbon colors. */\n dsStatus?: DSBadgeStatus;\n /** DS visual style — solid filled, light tinted, or outline only. */\n dsVariant?: DSBadgeVariant;\n /** DS size — sm, md, or lg. */\n dsSize?: DSBadgeSize;\n /** Custom text color applied when dsStatus is custom. */\n dsCustomTextColor?: string;\n /** Custom background color applied when dsStatus is custom. */\n dsCustomBackgroundColor?: string;\n /** Custom border color applied when dsStatus is custom. */\n dsCustomBorderColor?: string;\n};\n\nexport type BadgeRibbonProps = Omit<AntRibbonProps, RestrictedAntRibbonProps> & {\n /** DS semantic status — drives ribbon colors. */\n dsStatus?: DSBadgeStatus;\n /** DS visual style — solid filled, light tinted, or outline only. */\n dsVariant?: DSBadgeVariant;\n /** Custom text color applied when dsStatus is custom. */\n dsCustomTextColor?: string;\n /** Custom background color applied when dsStatus is custom. */\n dsCustomBackgroundColor?: string;\n /** Custom border color applied when dsStatus is custom. */\n dsCustomBorderColor?: string;\n};\n\ntype DSBadgeComponent = FC<BadgeProps> & {\n Ribbon: FC<BadgeRibbonProps>;\n};\n\nconst STYLE_ID = 'ds-badge-styles';\n\nconst ANT_STATUS_MAP: Record<DSBadgeStatus, AntBadgeProps['status']> = {\n neutral: 'default',\n success: 'success',\n warning: 'warning',\n error: 'error',\n processing: 'processing',\n inactive: 'default',\n new: 'processing',\n custom: 'default',\n};\n\nfunction injectStyles() {\n if (typeof document === 'undefined') return;\n\n const { badge } = 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-badge.ant-badge,\n .ds-badge-ribbon.ant-ribbon-wrapper {\n font-family: inherit;\n }\n\n .ds-badge.ant-badge .ant-badge-count,\n .ds-badge.ant-badge .ant-scroll-number,\n .ds-badge.ant-badge .ant-badge-dot,\n .ds-badge.ant-badge .ant-badge-status-dot,\n .ds-badge.ant-badge .ant-badge-status-text,\n .ds-badge-ribbon.ant-ribbon-wrapper .ant-ribbon,\n .ds-badge-ribbon.ant-ribbon-wrapper .ant-ribbon-text {\n transition: none !important;\n animation-duration: 0s !important;\n }\n\n .ds-badge.ant-badge .ant-badge-count,\n .ds-badge.ant-badge .ant-scroll-number {\n min-width: var(--ds-badge-count-size);\n height: var(--ds-badge-count-size);\n padding: var(--ds-badge-count-padding);\n border: var(--ds-badge-border-width) solid var(--ds-badge-border);\n border-radius: ${badge.count.radius};\n background: var(--ds-badge-bg);\n box-shadow: none;\n color: var(--ds-badge-text);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-size: var(--ds-badge-font-size);\n font-weight: ${badge.typography.fontWeight};\n line-height: var(--ds-badge-line-height);\n letter-spacing: var(--ds-badge-letter-spacing);\n font-family: inherit;\n }\n\n .ds-badge.ant-badge .ant-badge-dot {\n width: var(--ds-badge-dot-size);\n min-width: var(--ds-badge-dot-size);\n height: var(--ds-badge-dot-size);\n border: var(--ds-badge-dot-border-width) solid var(--ds-badge-dot-border);\n background: var(--ds-badge-bg);\n box-shadow: none;\n }\n\n .ds-badge.ant-badge.ant-badge-status .ant-badge-status-dot {\n width: var(--ds-badge-status-dot-size);\n height: var(--ds-badge-status-dot-size);\n background: var(--ds-badge-bg);\n border: var(--ds-badge-dot-border-width) solid var(--ds-badge-dot-border);\n }\n\n .ds-badge.ant-badge.ant-badge-status .ant-badge-status-text {\n color: ${badge.statusText.color};\n font-size: var(--ds-badge-status-font-size);\n font-weight: ${badge.statusText.fontWeight};\n line-height: var(--ds-badge-status-line-height);\n margin-inline-start: ${badge.statusText.gap};\n font-family: inherit;\n }\n\n .ds-badge-ribbon.ant-ribbon,\n .ds-badge-ribbon.ant-ribbon-wrapper .ant-ribbon {\n background: var(--ds-badge-bg);\n border: var(--ds-badge-border-width) solid var(--ds-badge-border);\n border-radius: ${badge.ribbon.radius};\n color: var(--ds-badge-text);\n font-size: ${badge.ribbon.fontSize};\n font-weight: ${badge.typography.fontWeight};\n line-height: ${badge.ribbon.lineHeight};\n letter-spacing: ${badge.ribbon.letterSpacing};\n box-shadow: none;\n font-family: inherit;\n }\n\n .ds-badge-ribbon.ant-ribbon .ant-ribbon-text,\n .ds-badge-ribbon.ant-ribbon .ant-ribbon-content,\n .ds-badge-ribbon.ant-ribbon-wrapper .ant-ribbon .ant-ribbon-text,\n .ds-badge-ribbon.ant-ribbon-wrapper .ant-ribbon .ant-ribbon-content {\n color: var(--ds-badge-text);\n }\n\n .ds-badge-ribbon.ant-ribbon .ant-ribbon-corner,\n .ds-badge-ribbon.ant-ribbon-wrapper .ant-ribbon-corner {\n color: var(--ds-badge-border);\n }\n `;\n}\n\nfunction getPalette(status: DSBadgeStatus, variant: DSBadgeVariant, customColors: DSBadgeCustomColors): DSBadgePalette {\n const { badge } = dsSemanticTokens;\n\n if (status === 'custom') {\n return {\n text: customColors.text ?? badge.status.neutral.light.text,\n bg: customColors.background ?? badge.status.neutral.light.bg,\n border: customColors.border ?? badge.status.neutral.light.border,\n };\n }\n\n return badge.status[status][variant] as DSBadgePalette;\n}\n\nfunction getCustomProperties(\n status: DSBadgeStatus,\n variant: DSBadgeVariant,\n size: DSBadgeSize,\n customColors: DSBadgeCustomColors,\n): CSSProperties {\n const { badge } = dsSemanticTokens;\n const palette = getPalette(status, variant, customColors);\n const sizeTokens = badge.size[size];\n\n return {\n '--ds-badge-bg': palette.bg ?? 'transparent',\n '--ds-badge-text': palette.text,\n '--ds-badge-border': palette.border ?? palette.bg ?? 'transparent',\n '--ds-badge-border-width': status === 'custom' || variant === 'outline' || palette.border ? badge.borderWidth : '0px',\n '--ds-badge-count-size': sizeTokens.countSize,\n '--ds-badge-count-padding': sizeTokens.countPadding,\n '--ds-badge-dot-size': sizeTokens.dotSize,\n '--ds-badge-status-dot-size': sizeTokens.statusDotSize,\n '--ds-badge-dot-border': variant === 'outline' ? palette.border ?? palette.text : badge.dot.border,\n '--ds-badge-dot-border-width': variant === 'outline' ? badge.borderWidth : badge.dot.borderWidth,\n '--ds-badge-font-size': sizeTokens.typography.fontSize,\n '--ds-badge-line-height': sizeTokens.typography.lineHeight,\n '--ds-badge-letter-spacing': sizeTokens.typography.letterSpacing,\n '--ds-badge-status-font-size': sizeTokens.statusTypography.fontSize,\n '--ds-badge-status-line-height': sizeTokens.statusTypography.lineHeight,\n } as CSSProperties;\n}\n\nfunction shouldRenderStatusBadge(props: Pick<BadgeProps, 'count' | 'dot' | 'text' | 'children'>) {\n return props.text !== undefined && props.count === undefined && !props.dot && props.children === undefined;\n}\n\nconst BadgeBase: FC<BadgeProps> = ({\n dsStatus = 'neutral',\n dsVariant = 'solid',\n dsSize = 'md',\n dsCustomTextColor,\n dsCustomBackgroundColor,\n dsCustomBorderColor,\n className: userClassName = '',\n rootClassName: userRootClassName = '',\n style: userStyle = {},\n ...restProps\n}) => {\n useEffect(() => {\n injectStyles();\n }, []);\n\n const className = `ds-badge${userClassName ? ` ${userClassName}` : ''}`;\n const rootClassName = `ds-badge${userRootClassName ? ` ${userRootClassName}` : ''}`;\n const customProperties = getCustomProperties(\n dsStatus,\n dsVariant,\n dsSize,\n {\n text: dsCustomTextColor,\n background: dsCustomBackgroundColor,\n border: dsCustomBorderColor,\n },\n );\n const status = shouldRenderStatusBadge(restProps) ? ANT_STATUS_MAP[dsStatus] : undefined;\n\n return (\n <AntBadge\n className={className}\n rootClassName={rootClassName}\n style={{ ...customProperties, ...userStyle }}\n status={status}\n data-ds-status={dsStatus}\n data-ds-variant={dsVariant}\n data-ds-size={dsSize}\n {...restProps}\n />\n );\n};\n\nconst BadgeRibbon: FC<BadgeRibbonProps> = ({\n dsStatus = 'neutral',\n dsVariant = 'solid',\n dsCustomTextColor,\n dsCustomBackgroundColor,\n dsCustomBorderColor,\n className: userClassName = '',\n rootClassName: userRootClassName = '',\n style: userStyle = {},\n ...restProps\n}) => {\n useEffect(() => {\n injectStyles();\n }, []);\n\n const className = `ds-badge-ribbon${userClassName ? ` ${userClassName}` : ''}`;\n const rootClassName = `ds-badge-ribbon${userRootClassName ? ` ${userRootClassName}` : ''}`;\n const customProperties = getCustomProperties(\n dsStatus,\n dsVariant,\n 'md',\n {\n text: dsCustomTextColor,\n background: dsCustomBackgroundColor,\n border: dsCustomBorderColor,\n },\n );\n\n return (\n <AntBadge.Ribbon\n className={className}\n rootClassName={rootClassName}\n style={{ ...customProperties, ...userStyle }}\n {...restProps}\n />\n );\n};\n\nexport const Badge = BadgeBase as DSBadgeComponent;\n\nBadge.displayName = 'Badge';\nBadgeRibbon.displayName = 'Badge.Ribbon';\nBadge.Ribbon = BadgeRibbon;\n","import { Empty as AntEmpty } from 'antd';\nimport type { EmptyProps as AntEmptyProps } from 'antd';\nimport type { CSSProperties, ReactNode } from 'react';\nimport { useEffect } from 'react';\nimport { dsSemanticTokens } from '../../theme/ontadaTheme';\nimport { useCustomIcon } from '../../utils/icons';\n\nexport type DSEmptyVariant = 'illustrated' | 'tablePrompt' | 'tableNoResults';\nexport type DSEmptySize = 'desktop' | 'mobile';\nexport type DSEmptyIconName = 'messages' | 'folderEmpty' | 'searchAlternate' | 'commonFileText';\n\ntype RestrictedAntProps = 'description' | 'image' | 'imageStyle';\n\nexport type EmptyProps = Omit<AntEmptyProps, RestrictedAntProps> & {\n /** DS empty-state variant matching Figma usage guidance. */\n dsVariant?: DSEmptyVariant;\n /** DS responsive scale for desktop or mobile empty-state blocks. */\n dsSize?: DSEmptySize;\n /** Optional illustration/icon override for illustrated empty states. */\n dsIconName?: DSEmptyIconName;\n /** Optional title override for illustrated empty states. */\n dsTitle?: ReactNode;\n /** Optional body/message override. */\n dsDescription?: ReactNode;\n};\n\nconst STYLE_ID = 'ds-empty-styles';\n\nconst VARIANT_CONTENT: Record<DSEmptyVariant, {\n iconName?: DSEmptyIconName;\n title?: string;\n description: string;\n}> = {\n illustrated: {\n iconName: 'messages',\n title: 'No Messages',\n description: 'When you have received messages, you will see them here.',\n },\n tablePrompt: {\n description: 'Please search or apply filters to populate list.',\n },\n tableNoResults: {\n description: 'No results match your search criteria, please adjust your filters.',\n },\n};\n\nfunction injectStyles() {\n if (typeof document === 'undefined') return;\n\n const { empty } = 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-empty.ant-empty {\n margin: 0;\n padding: 0;\n color: ${empty.text.description};\n font-family: inherit;\n }\n\n .ds-empty.ant-empty .ant-empty-image {\n height: auto;\n margin-bottom: var(--ds-empty-illustration-gap);\n line-height: 1;\n }\n\n .ds-empty.ant-empty .ant-empty-description {\n color: inherit;\n }\n\n .ds-empty.ant-empty .ant-empty-footer {\n margin-top: var(--ds-empty-action-gap);\n }\n\n .ds-empty-illustration {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--ds-empty-illustration-size);\n height: var(--ds-empty-illustration-size);\n color: ${empty.illustration.color};\n }\n\n .ds-empty-inbox-illustration {\n position: relative;\n display: inline-block;\n width: var(--ds-empty-illustration-size);\n height: var(--ds-empty-illustration-size);\n color: ${empty.illustration.color};\n }\n\n .ds-empty-inbox-box {\n position: absolute;\n left: 22%;\n right: 22%;\n bottom: 12%;\n height: 34%;\n border: ${empty.illustration.strokeWidth} solid currentColor;\n border-radius: 4px;\n background: transparent;\n }\n\n .ds-empty-inbox-box::before {\n content: '';\n position: absolute;\n left: 22%;\n right: 22%;\n bottom: 40%;\n height: 28%;\n border-bottom: ${empty.illustration.strokeWidth} solid currentColor;\n border-radius: 0 0 999px 999px;\n }\n\n .ds-empty-inbox-ray {\n position: absolute;\n top: 8%;\n left: 50%;\n width: ${empty.illustration.strokeWidth};\n height: 14%;\n background: currentColor;\n border-radius: 999px;\n transform-origin: bottom center;\n }\n\n .ds-empty-inbox-ray[data-ray='left'] {\n transform: translateX(-50%) rotate(-28deg) translateY(4%);\n }\n\n .ds-empty-inbox-ray[data-ray='center'] {\n transform: translateX(-50%);\n }\n\n .ds-empty-inbox-ray[data-ray='right'] {\n transform: translateX(-50%) rotate(28deg) translateY(4%);\n }\n\n .ds-empty-illustration .anticon,\n .ds-empty-illustration svg {\n width: var(--ds-empty-illustration-size) !important;\n height: var(--ds-empty-illustration-size) !important;\n font-size: var(--ds-empty-illustration-size) !important;\n color: inherit;\n }\n\n .ds-empty-inbox-svg {\n overflow: visible;\n }\n\n .ds-empty-inbox-svg path {\n fill: none !important;\n stroke: currentColor;\n stroke-width: 2;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n\n .ds-empty-illustration svg [fill]:not([fill=\"none\"]),\n .ds-empty-illustration svg path:not([fill=\"none\"]) {\n fill: currentColor !important;\n }\n\n .ds-empty-illustration svg [stroke]:not([stroke=\"none\"]) {\n stroke: currentColor !important;\n }\n\n .ds-empty-copy {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--ds-empty-copy-gap);\n width: min(var(--ds-empty-copy-width), 100%);\n margin: 0 auto;\n text-align: center;\n }\n\n .ds-empty-title {\n color: ${empty.text.title};\n font-size: var(--ds-empty-title-size);\n font-weight: ${empty.title.fontWeight};\n line-height: var(--ds-empty-title-line-height);\n letter-spacing: 0;\n margin: 0;\n }\n\n .ds-empty-description {\n color: ${empty.text.description};\n font-size: var(--ds-empty-description-size);\n font-weight: ${empty.description.fontWeight};\n line-height: var(--ds-empty-description-line-height);\n letter-spacing: 0;\n margin: 0;\n }\n\n .ds-empty-table {\n display: flex;\n min-height: var(--ds-empty-table-min-height);\n align-items: center;\n justify-content: center;\n padding: var(--ds-empty-table-padding);\n color: ${empty.text.title};\n font-family: inherit;\n text-align: center;\n }\n\n .ds-empty-table-content {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--ds-empty-table-action-gap);\n }\n\n .ds-empty-table-message {\n color: ${empty.text.title};\n font-size: var(--ds-empty-table-message-size);\n font-weight: ${empty.table.messageFontWeight};\n line-height: var(--ds-empty-table-message-line-height);\n letter-spacing: 0;\n margin: 0;\n }\n `;\n}\n\nfunction getCustomProperties(size: DSEmptySize): CSSProperties {\n const { empty } = dsSemanticTokens;\n const sizeTokens = empty.size[size];\n\n return {\n '--ds-empty-illustration-size': sizeTokens.illustrationSize,\n '--ds-empty-illustration-gap': sizeTokens.illustrationGap,\n '--ds-empty-copy-gap': sizeTokens.copyGap,\n '--ds-empty-copy-width': sizeTokens.copyWidth,\n '--ds-empty-action-gap': sizeTokens.actionGap,\n '--ds-empty-title-size': sizeTokens.title.fontSize,\n '--ds-empty-title-line-height': sizeTokens.title.lineHeight,\n '--ds-empty-description-size': sizeTokens.description.fontSize,\n '--ds-empty-description-line-height': sizeTokens.description.lineHeight,\n '--ds-empty-table-min-height': sizeTokens.tableMinHeight,\n '--ds-empty-table-padding': sizeTokens.tablePadding,\n '--ds-empty-table-action-gap': sizeTokens.tableActionGap,\n '--ds-empty-table-message-size': sizeTokens.tableMessage.fontSize,\n '--ds-empty-table-message-line-height': sizeTokens.tableMessage.lineHeight,\n } as CSSProperties;\n}\n\nfunction renderIllustration(iconName: DSEmptyIconName) {\n if (iconName === 'messages') {\n return (\n <svg className=\"ds-empty-inbox-svg\" viewBox=\"0 0 96 96\" role=\"presentation\" focusable=\"false\">\n <path d=\"M31 45H65L70 62H26L31 45Z\" />\n <path d=\"M26 62H39C41 68 55 68 57 62H70\" />\n <path d=\"M48 19V31\" />\n <path d=\"M34 25L39 35\" />\n <path d=\"M62 25L57 35\" />\n </svg>\n );\n }\n\n return useCustomIcon(iconName, { size: 96 });\n}\n\nexport const Empty = ({\n dsVariant = 'illustrated',\n dsSize = 'desktop',\n dsIconName,\n dsTitle,\n dsDescription,\n className: userClassName = '',\n rootClassName: userRootClassName = '',\n style: userStyle = {},\n children,\n ...restProps\n}: EmptyProps) => {\n useEffect(() => {\n injectStyles();\n }, []);\n\n const variantContent = VARIANT_CONTENT[dsVariant];\n const customProperties = getCustomProperties(dsSize);\n\n if (dsVariant === 'tablePrompt' || dsVariant === 'tableNoResults') {\n const className = `ds-empty-table${userClassName ? ` ${userClassName}` : ''}`;\n\n return (\n <div\n className={className}\n style={{ ...customProperties, ...userStyle }}\n data-ds-variant={dsVariant}\n data-ds-size={dsSize}\n >\n <div className=\"ds-empty-table-content\">\n <p className=\"ds-empty-table-message\">{dsDescription ?? variantContent.description}</p>\n {children}\n </div>\n </div>\n );\n }\n\n const iconName = dsIconName ?? variantContent.iconName ?? 'messages';\n const className = `ds-empty${userClassName ? ` ${userClassName}` : ''}`;\n const rootClassName = `ds-empty${userRootClassName ? ` ${userRootClassName}` : ''}`;\n const title = dsTitle ?? variantContent.title;\n\n const image = dsIconName ? (\n <span className=\"ds-empty-illustration\" aria-hidden=\"true\">\n {renderIllustration(iconName)}\n </span>\n ) : (\n <span className=\"ds-empty-inbox-illustration\" aria-hidden=\"true\">\n <span className=\"ds-empty-inbox-ray\" data-ray=\"left\" />\n <span className=\"ds-empty-inbox-ray\" data-ray=\"center\" />\n <span className=\"ds-empty-inbox-ray\" data-ray=\"right\" />\n <span className=\"ds-empty-inbox-box\" />\n </span>\n );\n const description = (\n <span className=\"ds-empty-copy\">\n {title ? <span className=\"ds-empty-title\">{title}</span> : null}\n <span className=\"ds-empty-description\">{dsDescription ?? variantContent.description}</span>\n </span>\n );\n\n return (\n <AntEmpty\n className={className}\n rootClassName={rootClassName}\n style={{ ...customProperties, ...userStyle }}\n image={image}\n description={description}\n data-ds-variant={dsVariant}\n data-ds-size={dsSize}\n {...restProps}\n >\n {children}\n </AntEmpty>\n );\n};\n\nEmpty.displayName = 'Empty';\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' | 'custom';\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 /** Custom status label rendered when dsStatus is custom. Falls back to children. */\n dsCustomStatusText?: React.ReactNode;\n /** Custom text color applied when dsStatus is custom. */\n dsCustomTextColor?: string;\n /** Custom background color applied when dsStatus is custom. */\n dsCustomBackgroundColor?: string;\n /** Custom border color applied when dsStatus is custom. */\n dsCustomBorderColor?: string;\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 customColors: {\n text?: string;\n background?: string;\n border?: string;\n },\n userStyle: CSSProperties,\n): CSSProperties {\n const { tag } = dsSemanticTokens;\n const palette = status === 'custom'\n ? {\n text: customColors.text ?? tag.status.neutral.light.text,\n bg: customColors.background ?? tag.status.neutral.light.bg,\n border: customColors.border ?? tag.status.neutral.light.border,\n }\n : 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 (status === 'custom' || 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 * <Tag dsStatus=\"custom\" dsCustomStatusText=\"Escalated\" dsCustomTextColor=\"#1e394e\" dsCustomBackgroundColor=\"#f2f6fa\" dsCustomBorderColor=\"#8da0b4\" />\n */\nexport const Tag = ({\n dsStatus = 'neutral',\n dsVariant = 'solid',\n dsSize = 'md',\n dsCustomStatusText,\n dsCustomTextColor,\n dsCustomBackgroundColor,\n dsCustomBorderColor,\n style: userStyle = {},\n className: userClassName = '',\n children,\n ...restProps\n}: TagProps) => {\n useEffect(() => {\n injectStyles();\n }, []);\n\n const computedStyles = buildStyles(\n dsStatus,\n dsVariant,\n dsSize,\n {\n text: dsCustomTextColor,\n background: dsCustomBackgroundColor,\n border: dsCustomBorderColor,\n },\n userStyle,\n );\n const className = `ds-tag${userClassName ? ` ${userClassName}` : ''}`;\n const content = dsStatus === 'custom' && dsCustomStatusText !== undefined ? dsCustomStatusText : children;\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 {content}\n </AntTag>\n );\n};\n\nTag.displayName = 'Tag';\nTag.CheckableTag = AntTag.CheckableTag;\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 { Pagination as DSPagination } from '../navigation/Pagination';\nimport type { DSPaginationProps } from '../navigation/Pagination';\nimport { ensureTooltipStyles, Tooltip as DSTooltip } from './Tooltip';\nimport type { DSTooltipSize } from './Tooltip';\n\nexport type DSTableStyle = 'styleA' | 'styleAEditable' | 'styleACustomizable' | 'styleAFixedHeaderFooter' | 'styleAResizable' | 'styleB';\nexport type DSTableHeaderVariant = 'default' | 'white';\nexport type DSTableFrozenColumns = 'none' | 'first' | 'last' | 'both';\nexport type DSTableColumnWidths = Record<string, number>;\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 * Scrollable body height for dsStyle=\"styleAFixedHeaderFooter\".\n */\n dsFixedBodyHeight?: number | string;\n /**\n * Enables column resizing. Automatically enabled for dsStyle=\"styleAResizable\".\n */\n dsResizableColumns?: boolean;\n /**\n * Controlled column widths by column key or dataIndex.\n */\n dsColumnWidths?: DSTableColumnWidths;\n /**\n * Called whenever a resizable column width changes.\n */\n dsOnColumnWidthsChange?: (nextWidths: DSTableColumnWidths) => void;\n /**\n * Minimum resizable column width in px.\n */\n dsResizableColumnMinWidth?: number;\n /**\n * Maximum resizable column width in px.\n */\n dsResizableColumnMaxWidth?: number;\n /**\n * Default width in px for resizable columns without an explicit width.\n */\n dsResizableDefaultColumnWidth?: number;\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\ntype DSTableSorterTooltip = Exclude<AntTableProps['showSorterTooltip'], boolean | undefined>;\n\nfunction mergeClassNames(...names: Array<string | undefined>) {\n return names.filter(Boolean).join(' ');\n}\n\nfunction getDSSorterTooltipProps(showSorterTooltip?: AntTableProps['showSorterTooltip']): AntTableProps['showSorterTooltip'] {\n if (showSorterTooltip === false) {\n return false;\n }\n\n const { tooltip } = dsSemanticTokens;\n const provided = showSorterTooltip && typeof showSorterTooltip === 'object'\n ? showSorterTooltip as DSTableSorterTooltip\n : undefined;\n\n return {\n ...provided,\n color: provided?.color ?? tooltip.surface.background,\n arrow: provided?.arrow ?? true,\n classNames: {\n ...provided?.classNames,\n root: mergeClassNames('ds-tooltip-overlay', 'ds-tooltip-size-normal', provided?.classNames?.root, provided?.overlayClassName),\n },\n styles: {\n ...provided?.styles,\n container: {\n borderRadius: tooltip.radius,\n color: tooltip.surface.body,\n letterSpacing: 0,\n minWidth: tooltip.width.normal.min,\n maxWidth: tooltip.width.normal.max,\n padding: tooltip.padding.normal,\n ...provided?.styles?.container,\n },\n },\n };\n}\n\nfunction withDSSortIcons(\n columns: any[] | undefined,\n tableShowSorterTooltip?: AntTableProps['showSorterTooltip'],\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 = withDSSortIcons(nextColumn.children, tableShowSorterTooltip);\n }\n\n if (nextColumn.sorter) {\n const columnShowSorterTooltip = nextColumn.showSorterTooltip === undefined\n ? tableShowSorterTooltip\n : nextColumn.showSorterTooltip;\n nextColumn.showSorterTooltip = getDSSorterTooltipProps(columnShowSorterTooltip);\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 getNumericColumnWidth(width: unknown): number | undefined {\n if (typeof width === 'number' && Number.isFinite(width)) return width;\n if (typeof width === 'string' && width.endsWith('px')) {\n const parsedWidth = Number(width.slice(0, -2));\n return Number.isFinite(parsedWidth) ? parsedWidth : undefined;\n }\n return undefined;\n}\n\nfunction clampColumnWidth(width: number, minWidth: number, maxWidth?: number): number {\n const widthWithMin = Math.max(minWidth, Math.round(width));\n return typeof maxWidth === 'number' ? Math.min(maxWidth, widthWithMin) : widthWithMin;\n}\n\nfunction getInitialColumnWidths(\n columns: any[] | undefined,\n defaultWidth: number,\n existingWidths: DSTableColumnWidths = {},\n): DSTableColumnWidths {\n if (!columns) return existingWidths;\n\n const nextWidths = { ...existingWidths };\n\n const traverse = (cols: any[]) => {\n cols.forEach((column) => {\n if (Array.isArray(column.children) && column.children.length > 0) {\n traverse(column.children);\n return;\n }\n\n const identity = getColumnIdentity(column);\n if (!identity || nextWidths[identity] != null) return;\n\n nextWidths[identity] = getNumericColumnWidth(column.width) ?? defaultWidth;\n });\n };\n\n traverse(columns);\n return nextWidths;\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\ntype DSResizableHeaderCellProps = React.ThHTMLAttributes<HTMLTableCellElement> & {\n width?: number;\n minWidth?: number;\n maxWidth?: number;\n onResize?: (nextWidth: number) => void;\n};\n\nconst DSResizableHeaderCell: React.FC<DSResizableHeaderCellProps> = ({\n width,\n minWidth = 96,\n maxWidth,\n onResize,\n children,\n className,\n style,\n ...restProps\n}) => {\n const startWidthRef = React.useRef(0);\n const startXRef = React.useRef(0);\n\n const updateWidth = React.useCallback((nextWidth: number) => {\n if (!onResize) return;\n onResize(clampColumnWidth(nextWidth, minWidth, maxWidth));\n }, [maxWidth, minWidth, onResize]);\n\n const handleMouseDown = React.useCallback((event: React.MouseEvent<HTMLButtonElement>) => {\n if (!onResize || typeof document === 'undefined') return;\n\n event.preventDefault();\n event.stopPropagation();\n startXRef.current = event.clientX;\n startWidthRef.current = width ?? event.currentTarget.parentElement?.getBoundingClientRect().width ?? minWidth;\n\n const handleMouseMove = (moveEvent: MouseEvent) => {\n const delta = moveEvent.clientX - startXRef.current;\n updateWidth(startWidthRef.current + delta);\n };\n\n const handleMouseUp = () => {\n document.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('mouseup', handleMouseUp);\n document.body.style.cursor = '';\n document.body.style.userSelect = '';\n };\n\n document.body.style.cursor = 'col-resize';\n document.body.style.userSelect = 'none';\n document.addEventListener('mousemove', handleMouseMove);\n document.addEventListener('mouseup', handleMouseUp);\n }, [minWidth, onResize, updateWidth, width]);\n\n const handleKeyDown = React.useCallback((event: React.KeyboardEvent<HTMLButtonElement>) => {\n if (!onResize || width == null) return;\n\n if (event.key !== 'ArrowLeft' && event.key !== 'ArrowRight') return;\n\n event.preventDefault();\n event.stopPropagation();\n const direction = event.key === 'ArrowLeft' ? -1 : 1;\n updateWidth(width + direction * (event.shiftKey ? 24 : 8));\n }, [onResize, updateWidth, width]);\n\n return (\n <th\n {...restProps}\n className={mergeClassNames(className, onResize ? 'ds-table-resizable-header-cell' : undefined)}\n style={{ ...style, width }}\n >\n {children}\n {onResize ? (\n <button\n type=\"button\"\n className=\"ds-table-resize-handle\"\n aria-label=\"Resize column\"\n onClick={(event) => event.stopPropagation()}\n onMouseDown={handleMouseDown}\n onKeyDown={handleKeyDown}\n />\n ) : null}\n </th>\n );\n};\n\nfunction withDSResizableColumns(\n columns: any[] | undefined,\n widths: DSTableColumnWidths,\n onColumnResize: (columnKey: string, nextWidth: number) => void,\n minWidth: number,\n maxWidth: number | undefined,\n defaultWidth: number,\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 = withDSResizableColumns(nextColumn.children, widths, onColumnResize, minWidth, maxWidth, defaultWidth);\n return nextColumn;\n }\n\n const identity = getColumnIdentity(nextColumn);\n if (!identity) return nextColumn;\n\n const width = widths[identity] ?? getNumericColumnWidth(nextColumn.width) ?? defaultWidth;\n const originalOnHeaderCell = nextColumn.onHeaderCell;\n nextColumn.width = width;\n nextColumn.onHeaderCell = (columnInstance: unknown) => {\n const providedHeaderCellProps = originalOnHeaderCell?.(columnInstance) ?? {};\n return {\n ...providedHeaderCellProps,\n width,\n minWidth,\n maxWidth,\n onResize: (nextWidth: number) => onColumnResize(identity, nextWidth),\n className: mergeClassNames(providedHeaderCellProps.className, 'ds-table-resizable-header'),\n };\n };\n\n return nextColumn;\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 .ant-table-thead > tr > th,\n .ds-table .ant-table-thead > tr > th:hover {\n color: ${table.text.body} !important;\n font-weight: ${table.typography.body.fontWeight} !important;\n }\n\n .ds-table .ant-table-thead > tr > th .ant-table-column-title {\n color: inherit !important;\n font-weight: inherit !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 .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 font-weight: ${table.typography.header.fontWeight} !important;\n }\n\n .ds-table .ant-table-thead > tr > th.ant-table-column-has-sorters .ant-table-column-title,\n .ds-table .ant-table-thead > tr > th.ant-table-column-sort .ant-table-column-title {\n font-weight: ${table.typography.header.fontWeight} !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.ds-table-styleAResizable .ant-table {\n background: ${table.surface.container} !important;\n }\n\n .ds-table.ds-table-styleAResizable .ant-table-thead > tr > th {\n border-bottom-width: 2px !important;\n }\n\n .ds-table.ds-table-styleAResizable .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-resizable-header-cell {\n position: relative !important;\n }\n\n .ds-table .ds-table-resize-handle {\n position: absolute !important;\n top: 8px !important;\n inset-inline-end: 0 !important;\n bottom: 8px !important;\n width: 12px !important;\n padding: 0 !important;\n border: 0 !important;\n border-radius: 0 !important;\n background: transparent !important;\n cursor: col-resize !important;\n touch-action: none !important;\n z-index: 2 !important;\n }\n\n .ds-table .ds-table-resize-handle::after {\n content: '' !important;\n position: absolute !important;\n top: 0 !important;\n bottom: 0 !important;\n inset-inline-end: 5px !important;\n width: 1px !important;\n background: ${table.border.bodyDivider} !important;\n opacity: 0 !important;\n transition: opacity 120ms ease !important;\n }\n\n .ds-table .ds-table-resizable-header-cell:hover .ds-table-resize-handle::after,\n .ds-table .ds-table-resize-handle:focus-visible::after {\n opacity: 1 !important;\n background: ${table.text.header} !important;\n }\n\n .ds-table .ds-table-resize-handle:focus-visible {\n outline: 2px solid ${table.text.header} !important;\n outline-offset: -2px !important;\n }\n\n .ds-table.ds-table-styleAFixedHeaderFooter .ant-table {\n background: ${table.surface.container} !important;\n }\n\n .ds-table.ds-table-styleAFixedHeaderFooter .ant-table-thead > tr > th {\n border-bottom-width: 2px !important;\n }\n\n .ds-table.ds-table-styleAFixedHeaderFooter .ant-table-container {\n border: none !important;\n border-radius: 0 !important;\n background: ${table.surface.container} !important;\n }\n\n .ds-table-fixed-frame {\n display: flex !important;\n flex-direction: column !important;\n width: 100% !important;\n background: ${table.surface.container} !important;\n }\n\n .ds-table-fixed-frame > .ds-table.ant-table-wrapper,\n .ds-table-fixed-frame > .ant-table-wrapper {\n flex: 1 1 auto !important;\n min-height: 0 !important;\n }\n\n .ds-table-fixed-frame .ant-table-body {\n overflow-y: auto !important;\n }\n\n .ds-table-fixed-footer {\n flex: 0 0 auto !important;\n min-height: 56px !important;\n display: flex !important;\n align-items: center !important;\n justify-content: flex-end !important;\n padding: 12px 16px !important;\n border-top: 1px solid ${table.border.bodyDivider} !important;\n background: ${table.surface.container} !important;\n box-sizing: border-box !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 dsFixedBodyHeight = 320,\n dsResizableColumns = false,\n dsColumnWidths,\n dsOnColumnWidthsChange,\n dsResizableColumnMinWidth = 96,\n dsResizableColumnMaxWidth,\n dsResizableDefaultColumnWidth = 180,\n size = 'middle',\n className,\n columns,\n dataSource,\n pagination,\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 const [localColumnWidths, setLocalColumnWidths] = React.useState<DSTableColumnWidths>(() => (\n dsColumnWidths ?? getInitialColumnWidths(columns as any[], dsResizableDefaultColumnWidth)\n ));\n\n useEffect(() => {\n injectStyles();\n ensureTooltipStyles();\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 {\n scroll: antScroll,\n tableLayout: antTableLayout,\n showSorterTooltip: antShowSorterTooltip,\n components: antComponents,\n ...restAntProps\n } = antProps;\n const useDSFrozenColumns = dsFrozenColumns !== 'none' && isAtOrBelowFrozenBreakpoint;\n const useEditableVariant = dsStyle === 'styleAEditable';\n const useCustomizableVariant = dsStyle === 'styleACustomizable' && dsCustomizable;\n const useFixedHeaderFooterVariant = dsStyle === 'styleAFixedHeaderFooter';\n const useResizableVariant = dsStyle === 'styleAResizable' || dsResizableColumns;\n const paginationConfig = pagination && typeof pagination === 'object' ? pagination : undefined;\n const [localCurrentPage, setLocalCurrentPage] = React.useState(paginationConfig?.defaultCurrent ?? 1);\n const [localPageSize, setLocalPageSize] = React.useState(paginationConfig?.defaultPageSize ?? paginationConfig?.pageSize ?? 10);\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 useEffect(() => {\n if (!useResizableVariant) return;\n\n if (dsColumnWidths) {\n setLocalColumnWidths(dsColumnWidths);\n return;\n }\n\n setLocalColumnWidths((prev) => getInitialColumnWidths(columns as any[], dsResizableDefaultColumnWidth, prev));\n }, [columns, dsColumnWidths, dsResizableDefaultColumnWidth, useResizableVariant]);\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 handleColumnResize = React.useCallback((columnKey: string, nextWidth: number) => {\n const clampedWidth = clampColumnWidth(nextWidth, dsResizableColumnMinWidth, dsResizableColumnMaxWidth);\n\n setLocalColumnWidths((prev) => {\n const next = { ...prev, [columnKey]: clampedWidth };\n dsOnColumnWidthsChange?.(next);\n return next;\n });\n }, [dsOnColumnWidthsChange, dsResizableColumnMaxWidth, dsResizableColumnMinWidth]);\n\n const columnsWithDSBehavior = React.useMemo(() => {\n const withSortIcons = withDSSortIcons(columns as any[], antShowSorterTooltip);\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 const withResizableColumns = useResizableVariant\n ? withDSResizableColumns(\n withEditableColumns,\n localColumnWidths,\n handleColumnResize,\n dsResizableColumnMinWidth,\n dsResizableColumnMaxWidth,\n dsResizableDefaultColumnWidth,\n )\n : withEditableColumns;\n\n if (!dsTruncateCellText || useEditableVariant) {\n return withResizableColumns;\n }\n\n return withDSTruncatedCells(\n withResizableColumns,\n dsTruncateTooltip,\n dsTruncateTooltipDelay,\n dsTruncateTooltipSize,\n dsTruncateTooltipTitle\n );\n }, [\n columns,\n antShowSorterTooltip,\n dsFrozenColumnWidth,\n dsFrozenColumns,\n dsTruncateCellText,\n dsTruncateTooltip,\n dsTruncateTooltipDelay,\n dsTruncateTooltipSize,\n dsTruncateTooltipTitle,\n normalizedEditableColumns,\n handleEditableCellChange,\n useResizableVariant,\n localColumnWidths,\n handleColumnResize,\n dsResizableColumnMinWidth,\n dsResizableColumnMaxWidth,\n dsResizableDefaultColumnWidth,\n useDSFrozenColumns,\n useEditableVariant,\n localVisibleColumns,\n useCustomizableVariant,\n handleColumnVisibilityToggle,\n ]);\n\n const effectiveScroll = React.useMemo(() => {\n if (useFixedHeaderFooterVariant) {\n const scrollBase = antScroll && typeof antScroll === 'object' ? antScroll : {};\n return {\n ...scrollBase,\n y: scrollBase.y ?? dsFixedBodyHeight,\n };\n }\n\n if (useResizableVariant) {\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 }\n\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, dsFixedBodyHeight, useDSFrozenColumns, useFixedHeaderFooterVariant, useResizableVariant]);\n\n const effectiveTableLayout = (useEditableVariant || useResizableVariant) ? (antTableLayout ?? 'fixed') : antTableLayout;\n const effectiveComponents = React.useMemo(() => {\n if (!useResizableVariant) return antComponents;\n\n return {\n ...antComponents,\n header: {\n ...antComponents?.header,\n cell: DSResizableHeaderCell,\n },\n };\n }, [antComponents, useResizableVariant]);\n\n const fixedPaginationTotal = paginationConfig?.total ?? (Array.isArray(dataSource) ? dataSource.length : 0);\n const fixedCurrentPage = paginationConfig?.current ?? localCurrentPage;\n const fixedPageSize = paginationConfig?.pageSize ?? localPageSize;\n const fixedDataSource = React.useMemo(() => {\n const source = useEditableVariant ? editableData : dataSource;\n if (!useFixedHeaderFooterVariant || !Array.isArray(source)) {\n return source;\n }\n\n if (paginationConfig?.total != null && paginationConfig.total > source.length) {\n return source;\n }\n\n const start = (fixedCurrentPage - 1) * fixedPageSize;\n return source.slice(start, start + fixedPageSize);\n }, [dataSource, editableData, fixedCurrentPage, fixedPageSize, paginationConfig?.total, useEditableVariant, useFixedHeaderFooterVariant]);\n\n const fixedFooterPaginationProps: DSPaginationProps = {\n ...paginationConfig,\n current: fixedCurrentPage,\n pageSize: fixedPageSize,\n total: fixedPaginationTotal,\n showSizeChanger: paginationConfig?.showSizeChanger ?? false,\n onChange: (page, pageSize) => {\n setLocalCurrentPage(page);\n setLocalPageSize(pageSize);\n paginationConfig?.onChange?.(page, pageSize);\n },\n onShowSizeChange: (page, pageSize) => {\n setLocalCurrentPage(page);\n setLocalPageSize(pageSize);\n paginationConfig?.onShowSizeChange?.(page, pageSize);\n },\n };\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 const tableElement = (\n <AntTable\n {...restAntProps}\n columns={columnsWithDSBehavior}\n dataSource={fixedDataSource}\n pagination={useFixedHeaderFooterVariant ? false : pagination}\n scroll={effectiveScroll}\n tableLayout={effectiveTableLayout}\n components={effectiveComponents}\n size={size}\n className={dsClassName}\n showSorterTooltip={getDSSorterTooltipProps(antShowSorterTooltip)}\n />\n );\n\n if (useFixedHeaderFooterVariant) {\n return (\n <div className={`${dsClassName} ds-table-fixed-frame`}>\n {tableElement}\n <div className=\"ds-table-fixed-footer\">\n <DSPagination {...fixedFooterPaginationProps} />\n </div>\n </div>\n );\n }\n\n return useCustomizableVariant ? (\n <div className={dsClassName}>\n <DSColumnVisibilityControl\n columns={columns as any[]}\n visibleColumns={localVisibleColumns}\n onToggle={handleColumnVisibilityToggle}\n />\n {tableElement}\n </div>\n ) : (\n tableElement\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 /** Show or remove borders around the control and selected state. */\n dsBordered?: boolean;\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][data-ds-bordered='false'] {\n border: none;\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][data-ds-bordered='false'] .ds-segmented-item[aria-checked='true'] {\n border: none;\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', dsBordered = true, 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-bordered={dsBordered ? 'true' : 'false'}\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 {\n top: 32px;\n padding-bottom: 32px;\n }\n\n .ant-modal-centered .ds-modal.ant-modal {\n top: 0;\n padding-bottom: 0;\n }\n\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 display: flex;\n flex-direction: column;\n max-height: calc(100dvh - 64px);\n }\n\n .ds-modal.ant-modal .ant-modal-header {\n position: relative;\n min-height: 56px;\n flex: 0 0 auto;\n background: ${modal.surface.header};\n border-radius: ${modal.border.radius} ${modal.border.radius} 0 0;\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 flex: 1 1 auto;\n min-height: 0;\n overflow-y: auto;\n overscroll-behavior: contain;\n scrollbar-gutter: stable;\n padding: 24px ${modal.spacing.header.x};\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 flex: 0 0 auto;\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 {\n top: 16px;\n padding-bottom: 16px;\n }\n\n .ds-modal.ant-modal.ds-modal-mobile .ant-modal-container {\n max-height: calc(100dvh - 32px);\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: 16px ${modal.spacing.header.x};\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 height: 100dvh;\n min-height: 100dvh;\n max-height: 100dvh;\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-radius: ${modal.border.fullScreenRadius} ${modal.border.fullScreenRadius} 0 0;\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 flex: 1 1 auto;\n min-height: 0;\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 { CORE_COLORS } from '../../tokens/core';\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: CORE_COLORS.status.successDeep,\n info: CORE_COLORS.text.muted,\n warning: CORE_COLORS.status.warningDark,\n error: CORE_COLORS.status.errorDark,\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';\nimport { CORE_COLORS } from '../../tokens/core';\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: color-mix(in srgb, ${CORE_COLORS.surface.subtle} 72%, transparent) !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","import { Drawer as AntDrawer } from 'antd';\nimport type { DrawerProps as AntDrawerProps } from 'antd';\nimport type { MouseEventHandler, ReactNode } from 'react';\nimport { useEffect } from 'react';\nimport { dsSemanticTokens } from '../../theme/ontadaTheme';\nimport { Button } from '../forms';\nimport type { ButtonProps } from '../forms';\n\nexport type DSDrawerVariant = 'details' | 'edit' | 'filter' | 'confirmation' | 'workflowPanel';\nexport type DSDrawerSize = 'narrow' | 'standard' | 'wide' | 'full';\nexport type DSDrawerFooter = 'auto' | 'actions' | 'none';\n\nexport type DSDrawerAction = {\n label: ReactNode;\n onClick?: ButtonProps['onClick'];\n disabled?: boolean;\n loading?: boolean;\n};\n\nexport type DrawerProps = Omit<AntDrawerProps, 'size'> & {\n /** DS workflow variant controlling width, density, surface, and default footer behavior. */\n dsVariant?: DSDrawerVariant;\n /** DS width preset. Defaults from the selected workflow variant. */\n dsSize?: DSDrawerSize;\n /** DS footer mode. `auto` follows the selected workflow variant. */\n dsFooter?: DSDrawerFooter;\n /** Optional supporting text rendered below the drawer title. */\n dsDescription?: ReactNode;\n /** Primary footer action rendered last in the action group. */\n dsPrimaryAction?: DSDrawerAction;\n /** Secondary footer action rendered before the primary action. */\n dsSecondaryAction?: DSDrawerAction;\n /** Tertiary footer action rendered at the start edge of the footer. */\n dsTertiaryAction?: DSDrawerAction;\n};\n\nconst STYLE_ID = 'ds-drawer-styles';\n\nconst SIZE_BY_VARIANT: Record<DSDrawerVariant, DSDrawerSize> = {\n details: 'standard',\n edit: 'wide',\n filter: 'narrow',\n confirmation: 'narrow',\n workflowPanel: 'full',\n};\n\nconst DEFAULT_FOOTER_BY_VARIANT: Record<DSDrawerVariant, DSDrawerFooter> = {\n details: 'none',\n edit: 'actions',\n filter: 'actions',\n confirmation: 'actions',\n workflowPanel: 'actions',\n};\n\nconst DEFAULT_PRIMARY_LABEL: Record<DSDrawerVariant, ReactNode> = {\n details: 'Done',\n edit: 'Save',\n filter: 'Apply filters',\n confirmation: 'Confirm',\n workflowPanel: 'Continue',\n};\n\nconst DEFAULT_SECONDARY_LABEL: Record<DSDrawerVariant, ReactNode> = {\n details: 'Close',\n edit: 'Cancel',\n filter: 'Reset',\n confirmation: 'Cancel',\n workflowPanel: 'Back',\n};\n\nconst mergeClassNames = (...classNames: Array<string | undefined>): string =>\n classNames.filter(Boolean).join(' ').trim();\n\nfunction injectStyles() {\n if (typeof document === 'undefined') return;\n\n const { drawer } = 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-drawer-root .ant-drawer-mask {\n background: ${drawer.backdrop} !important;\n }\n\n .ds-drawer-root .ant-drawer-content-wrapper {\n box-shadow: ${drawer.shadow} !important;\n }\n\n .ds-drawer-root .ant-drawer-content,\n .ds-drawer.ant-drawer-content {\n background: ${drawer.surface.background};\n border-radius: ${drawer.border.radius};\n overflow: hidden;\n }\n\n .ds-drawer-root .ant-drawer-header {\n flex: 0 0 auto !important;\n min-height: 64px;\n height: auto !important;\n padding: ${drawer.spacing.header};\n background: ${drawer.surface.header};\n border-bottom: ${drawer.border.width} solid ${drawer.border.color};\n align-items: flex-start;\n box-sizing: border-box;\n }\n\n .ds-drawer-root .ant-drawer-header-title {\n width: 100%;\n min-width: 0;\n min-height: 0;\n height: auto !important;\n gap: 12px;\n align-items: flex-start;\n }\n\n .ds-drawer-root .ant-drawer-title {\n flex: 1 1 auto;\n min-width: 0;\n color: ${drawer.text.title};\n font-family: 'Nunito', sans-serif;\n font-size: 18px;\n font-weight: 700;\n line-height: 24px;\n letter-spacing: 0;\n white-space: normal;\n overflow-wrap: anywhere;\n }\n\n .ds-drawer-title-stack {\n display: flex;\n flex-direction: column;\n gap: 4px;\n width: 100%;\n min-width: 0;\n }\n\n .ds-drawer-title-text,\n .ds-drawer-description {\n overflow-wrap: anywhere;\n }\n\n .ds-drawer-description {\n color: ${drawer.text.description};\n font-size: 14px;\n font-weight: 400;\n line-height: 20px;\n }\n\n .ds-drawer-root .ant-drawer-close {\n width: ${drawer.closeButton.size};\n height: ${drawer.closeButton.size};\n padding: 0;\n margin-inline-end: 0;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex: 0 0 ${drawer.closeButton.size};\n color: ${drawer.closeButton.color};\n border-radius: ${drawer.closeButton.radius};\n background: transparent !important;\n border: 0 !important;\n box-shadow: none !important;\n }\n\n .ds-drawer-root .ant-drawer-close svg {\n width: ${drawer.closeButton.iconSize};\n height: ${drawer.closeButton.iconSize};\n }\n\n .ds-drawer-root .ant-drawer-body {\n padding: ${drawer.spacing.body};\n background: ${drawer.surface.background};\n color: ${drawer.text.body};\n font-family: 'Nunito', sans-serif;\n font-size: 14px;\n line-height: 20px;\n }\n\n .ds-drawer-root .ant-drawer-footer {\n min-height: 64px;\n margin: 0;\n padding: ${drawer.spacing.footer};\n background: ${drawer.surface.footer};\n border-top: ${drawer.border.width} solid ${drawer.border.color};\n }\n\n .ds-drawer-actions {\n display: flex;\n width: 100%;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n }\n\n .ds-drawer-actions-main {\n display: inline-flex;\n align-items: center;\n justify-content: flex-end;\n gap: 12px;\n margin-inline-start: auto;\n }\n\n .ds-drawer-root.ds-drawer-variant-details .ant-drawer-body {\n background: ${drawer.surface.details};\n }\n\n .ds-drawer-root.ds-drawer-variant-edit .ant-drawer-body,\n .ds-drawer-root.ds-drawer-variant-workflowPanel .ant-drawer-body {\n padding: ${drawer.spacing.body};\n }\n\n .ds-drawer-root.ds-drawer-variant-filter .ant-drawer-body {\n padding: ${drawer.spacing.bodyCompact};\n }\n\n .ds-drawer-root.ds-drawer-footer-none .ant-drawer-footer {\n display: none;\n }\n\n @media (max-width: 640px) {\n .ds-drawer-root .ant-drawer-content-wrapper {\n max-width: 100vw !important;\n }\n\n .ds-drawer-root .ant-drawer-header,\n .ds-drawer-root .ant-drawer-body,\n .ds-drawer-root .ant-drawer-footer {\n padding-left: 16px;\n padding-right: 16px;\n }\n\n .ds-drawer-actions,\n .ds-drawer-actions-main {\n flex-direction: column-reverse;\n align-items: stretch;\n }\n\n .ds-drawer-actions-main {\n width: 100%;\n margin-inline-start: 0;\n }\n\n .ds-drawer-actions .ant-btn {\n width: 100%;\n }\n }\n `;\n}\n\nfunction renderTitle(title: ReactNode, description?: ReactNode) {\n if (!description) return title;\n\n return (\n <span className=\"ds-drawer-title-stack\">\n <span className=\"ds-drawer-title-text\">{title}</span>\n <span className=\"ds-drawer-description\">{description}</span>\n </span>\n );\n}\n\nfunction actionButton(action: DSDrawerAction, dsVariant: ButtonProps['dsVariant'], fallbackOnClick?: ButtonProps['onClick']) {\n return (\n <Button dsVariant={dsVariant} disabled={action.disabled} loading={action.loading} onClick={action.onClick ?? fallbackOnClick}>\n {action.label}\n </Button>\n );\n}\n\nexport const Drawer = ({\n dsVariant = 'details',\n dsSize,\n dsFooter = 'auto',\n dsDescription,\n dsPrimaryAction,\n dsSecondaryAction,\n dsTertiaryAction,\n rootClassName,\n className,\n title,\n footer,\n onClose,\n placement = 'right',\n children,\n ...props\n}: DrawerProps) => {\n useEffect(() => {\n injectStyles();\n }, []);\n\n const resolvedSize = dsSize ?? SIZE_BY_VARIANT[dsVariant];\n const resolvedFooterMode = dsFooter === 'auto' ? DEFAULT_FOOTER_BY_VARIANT[dsVariant] : dsFooter;\n const fallbackOnClose: MouseEventHandler<HTMLElement> = (event) => onClose?.(event);\n const primaryAction = dsPrimaryAction ?? { label: DEFAULT_PRIMARY_LABEL[dsVariant] };\n const secondaryAction = dsSecondaryAction ?? { label: DEFAULT_SECONDARY_LABEL[dsVariant] };\n\n const resolvedFooter = footer !== undefined\n ? footer\n : resolvedFooterMode === 'none'\n ? null\n : (\n <div className=\"ds-drawer-actions\">\n <div>{dsTertiaryAction ? actionButton(dsTertiaryAction, 'tertiary', fallbackOnClose) : null}</div>\n <div className=\"ds-drawer-actions-main\">\n {actionButton(secondaryAction, 'secondary', fallbackOnClose)}\n {actionButton(primaryAction, 'primary')}\n </div>\n </div>\n );\n\n return (\n <AntDrawer\n {...props}\n placement={placement}\n size={dsSemanticTokens.drawer.width[resolvedSize]}\n title={renderTitle(title, dsDescription)}\n footer={resolvedFooter}\n onClose={onClose}\n rootClassName={mergeClassNames('ds-drawer-root', `ds-drawer-variant-${dsVariant}`, `ds-drawer-size-${resolvedSize}`, `ds-drawer-footer-${resolvedFooterMode}`, rootClassName)}\n className={mergeClassNames('ds-drawer', className)}\n data-ds-drawer-variant={dsVariant}\n data-ds-drawer-size={resolvedSize}\n data-ds-drawer-footer={resolvedFooterMode}\n >\n {children}\n </AntDrawer>\n );\n};\n\nDrawer.displayName = 'Drawer';"],"mappings":"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"}