@j2-health/design-system 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +113 -0
- package/dist/favicon.png +0 -0
- package/dist/index.cjs +3624 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +43 -0
- package/dist/index.js +3606 -0
- package/dist/index.js.map +1 -0
- package/dist/lib.d.ts +2 -0
- package/dist/src/AppConfigProvider.d.ts +4 -0
- package/dist/src/appTheme.d.ts +2 -0
- package/dist/src/components/alert/Alert.d.ts +11 -0
- package/dist/src/components/alert/index.d.ts +1 -0
- package/dist/src/components/barchart/BarChart.d.ts +30 -0
- package/dist/src/components/barchart/index.d.ts +2 -0
- package/dist/src/components/breadcrumb/Breadcrumb.d.ts +14 -0
- package/dist/src/components/breadcrumb/index.d.ts +1 -0
- package/dist/src/components/bulkActionBar/BulkActionBar.d.ts +38 -0
- package/dist/src/components/bulkActionBar/index.d.ts +1 -0
- package/dist/src/components/button/Button.d.ts +4 -0
- package/dist/src/components/button/index.d.ts +1 -0
- package/dist/src/components/card/Card.d.ts +19 -0
- package/dist/src/components/card/index.d.ts +1 -0
- package/dist/src/components/checkbox/Checkbox.d.ts +7 -0
- package/dist/src/components/checkbox/index.d.ts +1 -0
- package/dist/src/components/checkboxTree/CheckboxTree.d.ts +27 -0
- package/dist/src/components/checkboxTree/TreeNode.d.ts +13 -0
- package/dist/src/components/checkboxTree/index.d.ts +1 -0
- package/dist/src/components/checkboxTree/utils.d.ts +9 -0
- package/dist/src/components/collapse/Collapse.d.ts +9 -0
- package/dist/src/components/collapse/index.d.ts +1 -0
- package/dist/src/components/drawer/Drawer.d.ts +9 -0
- package/dist/src/components/drawer/index.d.ts +1 -0
- package/dist/src/components/dropdown/Dropdown.d.ts +17 -0
- package/dist/src/components/dropdown/index.d.ts +1 -0
- package/dist/src/components/filterform/FilterGroup.d.ts +16 -0
- package/dist/src/components/filterform/FilterInput.d.ts +14 -0
- package/dist/src/components/filterform/FiltersForm.d.ts +10 -0
- package/dist/src/components/filterform/filterHelpers.d.ts +11 -0
- package/dist/src/components/filterform/index.d.ts +2 -0
- package/dist/src/components/filterform/types.d.ts +52 -0
- package/dist/src/components/filterform/useFilterField.d.ts +43 -0
- package/dist/src/components/filterform/useFiltersForm.d.ts +59 -0
- package/dist/src/components/form/Form.d.ts +7 -0
- package/dist/src/components/form/index.d.ts +1 -0
- package/dist/src/components/icons/index.d.ts +1 -0
- package/dist/src/components/input/AntdInput.d.ts +322 -0
- package/dist/src/components/input/AntdSearchInput.d.ts +327 -0
- package/dist/src/components/input/Input.d.ts +4 -0
- package/dist/src/components/input/index.d.ts +3 -0
- package/dist/src/components/inputnumber/InputNumber.d.ts +9 -0
- package/dist/src/components/inputnumber/index.d.ts +1 -0
- package/dist/src/components/legacyNavMenu/LegacyNavMenu.d.ts +27 -0
- package/dist/src/components/legacyNavMenu/UserProfile.d.ts +9 -0
- package/dist/src/components/legacyNavMenu/index.d.ts +4 -0
- package/dist/src/components/listpopover/ListPopover.d.ts +17 -0
- package/dist/src/components/listpopover/index.d.ts +1 -0
- package/dist/src/components/menu/Menu.d.ts +7 -0
- package/dist/src/components/menu/index.d.ts +2 -0
- package/dist/src/components/message/index.d.ts +2 -0
- package/dist/src/components/message/useMessage.d.ts +7 -0
- package/dist/src/components/modal/Modal.d.ts +6 -0
- package/dist/src/components/modal/index.d.ts +2 -0
- package/dist/src/components/navMenu/NavMenu.d.ts +14 -0
- package/dist/src/components/navMenu/index.d.ts +1 -0
- package/dist/src/components/notification/index.d.ts +2 -0
- package/dist/src/components/notification/useNotification.d.ts +10 -0
- package/dist/src/components/notificationModal/NotificationModal.d.ts +11 -0
- package/dist/src/components/notificationModal/index.d.ts +2 -0
- package/dist/src/components/pagination/Pagination.d.ts +18 -0
- package/dist/src/components/pagination/index.d.ts +1 -0
- package/dist/src/components/popover/Popover.d.ts +10 -0
- package/dist/src/components/popover/index.d.ts +1 -0
- package/dist/src/components/progress/Progress.d.ts +3 -0
- package/dist/src/components/progress/index.d.ts +1 -0
- package/dist/src/components/radio/Radio.d.ts +10 -0
- package/dist/src/components/radio/index.d.ts +1 -0
- package/dist/src/components/rate/Rate.d.ts +3 -0
- package/dist/src/components/rate/index.d.ts +1 -0
- package/dist/src/components/select/AntdSelect.d.ts +5 -0
- package/dist/src/components/select/Select.d.ts +7 -0
- package/dist/src/components/select/SummarizedSelect.d.ts +44 -0
- package/dist/src/components/select/index.d.ts +4 -0
- package/dist/src/components/skeleton/Skeleton.d.ts +11 -0
- package/dist/src/components/skeleton/index.d.ts +1 -0
- package/dist/src/components/spinner/Spinner.d.ts +6 -0
- package/dist/src/components/spinner/index.d.ts +1 -0
- package/dist/src/components/steps/Steps.d.ts +10 -0
- package/dist/src/components/steps/index.d.ts +2 -0
- package/dist/src/components/steps/useSteps.d.ts +17 -0
- package/dist/src/components/switch/Switch.d.ts +11 -0
- package/dist/src/components/switch/index.d.ts +1 -0
- package/dist/src/components/table/Table.d.ts +24 -0
- package/dist/src/components/table/index.d.ts +1 -0
- package/dist/src/components/tabs/Tabs.d.ts +3 -0
- package/dist/src/components/tabs/index.d.ts +1 -0
- package/dist/src/components/tag/Tag.d.ts +20 -0
- package/dist/src/components/tag/index.d.ts +1 -0
- package/dist/src/components/tooltip/Tooltip.d.ts +4 -0
- package/dist/src/components/tooltip/index.d.ts +1 -0
- package/dist/src/components/vennDiagram/VennDiagram.d.ts +9 -0
- package/dist/src/components/vennDiagram/index.d.ts +1 -0
- package/dist/src/index.d.ts +11 -0
- package/dist/src/vite-env.d.ts +1 -0
- package/dist/style.css +1254 -0
- package/dist/tailwind.cjs +170 -0
- package/dist/tailwind.cjs.map +1 -0
- package/dist/tailwind.config.d.ts +305 -0
- package/dist/tailwind.js +170 -0
- package/dist/tailwind.js.map +1 -0
- package/dist/vite.svg +1 -0
- package/package.json +125 -0
- package/src/stylesheets/index.css +327 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/appTheme.ts","../src/AppConfigProvider.tsx","../src/components/alert/Alert.tsx","../src/components/barchart/BarChart.tsx","../src/components/breadcrumb/Breadcrumb.tsx","../src/components/button/Button.tsx","../src/components/bulkActionBar/BulkActionBar.tsx","../src/components/card/Card.tsx","../src/components/checkbox/Checkbox.tsx","../src/components/checkboxTree/utils.ts","../src/components/checkboxTree/TreeNode.tsx","../src/components/checkboxTree/CheckboxTree.tsx","../src/components/collapse/Collapse.tsx","../src/components/drawer/Drawer.tsx","../src/components/dropdown/Dropdown.tsx","../src/components/filterform/filterHelpers.ts","../src/components/filterform/useFilterField.tsx","../src/components/filterform/FilterInput.tsx","../src/components/filterform/useFiltersForm.ts","../src/components/filterform/FilterGroup.tsx","../src/components/filterform/FiltersForm.tsx","../src/components/form/Form.tsx","../src/components/input/Input.tsx","../src/components/input/AntdInput.tsx","../src/components/input/AntdSearchInput.tsx","../src/components/inputnumber/InputNumber.tsx","../src/components/popover/Popover.tsx","../src/components/tooltip/Tooltip.tsx","../src/components/listpopover/ListPopover.tsx","../src/components/menu/Menu.tsx","../src/components/message/useMessage.tsx","../src/components/modal/Modal.tsx","../src/svgs/j2-logo-menu-collapse.svg?react","../src/svgs/j2-logo-menu.svg?react","../src/svgs/menu-sidebar-expand.svg?react","../src/svgs/menu-sidebar-collapse.svg?react","../src/components/navMenu/NavMenu.tsx","../src/components/notification/useNotification.tsx","../src/components/notificationModal/NotificationModal.tsx","../src/components/pagination/Pagination.tsx","../src/components/progress/Progress.tsx","../src/components/radio/Radio.tsx","../src/components/rate/Rate.tsx","../src/components/select/Select.tsx","../src/components/select/AntdSelect.tsx","../src/components/tag/Tag.tsx","../src/components/select/SummarizedSelect.tsx","../src/components/skeleton/Skeleton.tsx","../src/svgs/ProgressCircle.svg?react","../src/components/spinner/Spinner.tsx","../src/components/steps/useSteps.ts","../src/components/steps/Steps.tsx","../src/components/switch/Switch.tsx","../src/components/table/Table.tsx","../src/components/tabs/Tabs.tsx","../src/components/vennDiagram/VennDiagram.tsx","../src/components/legacyNavMenu/UserProfile.tsx","../src/components/legacyNavMenu/LegacyNavMenu.tsx"],"sourcesContent":["import { ThemeConfig } from 'antd'\n\nexport const appTheme: ThemeConfig = {\n token: {\n // Colors\n colorText: 'var(--j2-color-text)',\n colorTextSecondary: 'var(--j2-color-text-secondary)',\n colorTextTertiary: 'var(--j2-color-text-tertiary)',\n colorTextQuaternary: 'var(--j2-color-text-quaternary)',\n colorTextHeading: 'var(--j2-color-text-heading)',\n colorTextLabel: 'var(--j2-color-text-label)',\n colorTextDescription: 'var(--j2-color-text-description)',\n colorTextDisabled: 'var(--j2-color-text-disabled)',\n colorTextPlaceholder: 'var(--j2-color-text-placeholder)',\n colorIcon: 'var(--j2-color-icon)',\n colorIconHover: 'var(--j2-color-icon-hover)',\n colorBgLayout: 'var(--j2-color-bg-layout)',\n colorBorder: 'var(--j2-color-border)',\n colorBorderSecondary: 'var(--j2-color-border-secondary)',\n colorPrimary: '#253761', // var(--j2-blue-9)\n colorSuccess: '#57a45e', // var(--j2-green-9)\n colorWarning: '#9e6e00', // var(--j2-gold-11)\n colorInfo: '#253761', // var(--j2-blue-9)\n colorLink: '#253761', // var(--j2-blue-9)\n colorError: '#bf6c6f', // var(--j2-red-9)\n colorErrorBg: 'var(--j2-color-error-bg)',\n colorErrorBgHover: 'var(--j2-color-error-bg-hover)',\n colorErrorBorder: 'var(--j2-color-error-border)',\n colorErrorBorderHover: 'var(--j2-color-error-border-hover)',\n colorErrorHover: 'var(--j2-color-error-hover)',\n colorErrorActive: 'var(--j2-color-error-active)',\n colorErrorTextHover: 'var(--j2-color-error-text-hover)',\n colorErrorText: 'var(--j2-color-error-text)',\n colorErrorTextActive: 'var(--j2-color-error-text-active)',\n colorLinkHover: 'var(--j2-color-link-hover)',\n colorInfoBg: 'var(--j2-color-info-bg)',\n colorInfoBgHover: 'var(--j2-color-info-bg-hover)',\n colorInfoBorder: 'var(--j2-color-info-border)',\n colorInfoBorderHover: 'var(--j2-color-info-border-hover)',\n colorInfoHover: 'var(--j2-color-info-hover)',\n colorInfoActive: 'var(--j2-color-info-active)',\n colorInfoTextHover: 'var(--j2-color-info-text-hover)',\n colorInfoText: 'var(--j2-color-info-text)',\n colorInfoTextActive: 'var(--j2-color-info-text-active)',\n colorLinkActive: 'var(--j2-color-link-active)',\n colorPrimaryBg: 'var(--j2-color-primary-bg)',\n colorPrimaryBgHover: 'var(--j2-color-primary-bg-hover)',\n colorPrimaryBorder: 'var(--j2-color-primary-border)',\n colorPrimaryBorderHover: 'var(--j2-color-primary-border-hover)',\n colorPrimaryHover: 'var(--j2-color-primary-hover)',\n colorPrimaryActive: 'var(--j2-color-primary-active)',\n colorPrimaryTextHover: 'var(--j2-color-primary-text-hover)',\n colorPrimaryText: 'var(--j2-color-primary-text)',\n colorPrimaryTextActive: 'var(--j2-color-primary-text-active)',\n colorSuccessBg: 'var(--j2-color-success-bg)',\n colorSuccessBgHover: 'var(--j2-color-success-bg-hover)',\n colorSuccessBorder: 'var(--j2-color-success-border)',\n colorSuccessBorderHover: 'var(--j2-color-success-border-hover)',\n colorSuccessHover: 'var(--j2-color-success-hover)',\n colorSuccessActive: 'var(--j2-color-success-active)',\n colorSuccessTextHover: 'var(--j2-color-success-text-hover)',\n colorSuccessText: 'var(--j2-color-success-text)',\n colorSuccessTextActive: 'var(--j2-color-success-text-active)',\n colorWarningBg: 'var(--j2-color-warning-bg)',\n colorWarningBgHover: 'var(--j2-color-warning-bg-hover)',\n colorWarningBorder: 'var(--j2-color-warning-border)',\n colorWarningBorderHover: 'var(--j2-color-warning-border-hover)',\n colorWarningHover: 'var(--j2-color-warning-hover)',\n colorWarningActive: 'var(--j2-color-warning-active)',\n colorWarningTextHover: 'var(--j2-color-warning-text-hover)',\n colorWarningText: 'var(--j2-color-warning-text)',\n colorWarningTextActive: 'var(--j2-color-warning-text-active)',\n controlItemBgActive: 'var(--j2-control-item-bg-active)',\n controlItemBgActiveHover: 'var(--j2-control-item-bg-active-hover)',\n colorFill: 'var(--j2-color-fill)',\n colorFillSecondary: 'var(--j2-color-fill-secondary)',\n colorFillTertiary: 'var(--j2-color-fill-tertiary)',\n colorFillQuaternary: 'var(--j2-color-fill-quaternary)',\n colorFillContent: 'var(--j2-color-fill-content)',\n colorFillContentHover: 'var(--j2-color-fill-content-hover)',\n colorBgMask: 'var(--j2-color-bg-mask)',\n colorBgSpotlight: 'var(--j2-color-bg-spotlight)',\n colorBgContainerDisabled: 'var(--j2-color-bg-container-disabled)',\n colorBgTextActive: 'var(--j2-color-bg-text-active)',\n colorBgTextHover: 'var(--j2-color-bg-text-hover)',\n colorFillAlter: 'var(--j2-color-fill-alter)',\n colorSplit: 'var(--j2-color-split)',\n colorErrorOutline: 'var(--j2-color-error-outline)',\n colorWarningOutline: 'var(--j2-color-warning-outline)',\n controlItemBgActiveDisabled: 'var(--j2-control-item-bg-active-disabled)',\n controlItemBgHover: 'var(--j2-control-item-bg-hover)',\n controlOutline: 'var(--j2-control-outline)',\n controlTmpOutline: 'var(--j2-control-tmp-outline)',\n\n // Typography\n fontFamily: 'Rubik, sans-serif',\n fontFamilyCode: 'Rubik, sans-serif',\n fontSize: 14,\n fontSizeLG: 16,\n fontSizeSM: 12,\n fontSizeXL: 20,\n fontSizeHeading1: 38,\n fontSizeHeading2: 30,\n fontSizeHeading3: 24,\n fontSizeHeading4: 20,\n fontSizeHeading5: 16,\n lineHeight: 1.5714285714285714,\n lineHeightHeading1: 1.2105263157894737,\n lineHeightHeading2: 1.2666666666666666,\n lineHeightHeading3: 1.3333333333333333,\n lineHeightHeading4: 1.4,\n lineHeightHeading5: 1.5,\n lineHeightLG: 1.5,\n lineHeightSM: 1.6666666666666667,\n fontSizeIcon: 12,\n fontWeightStrong: 600,\n\n // Border\n borderRadius: 8,\n borderRadiusLG: 10,\n borderRadiusSM: 6,\n borderRadiusXS: 2,\n\n // Spacing and sizing\n sizeStep: 4,\n sizeUnit: 4,\n controlInteractiveSize: 16,\n size: 16,\n sizeLG: 24,\n sizeMD: 20,\n sizeMS: 16,\n sizeSM: 12,\n sizeXL: 32,\n sizeXS: 8,\n sizeXXL: 48,\n controlHeight: 32,\n sizeXXS: 4,\n controlHeightLG: 40,\n controlHeightSM: 24,\n controlHeightXS: 16,\n lineWidth: 1,\n lineWidthBold: 2,\n lineWidthFocus: 4,\n controlOutlineWidth: 2,\n screenLG: 992,\n screenLGMax: 1199,\n screenLGMin: 992,\n screenMD: 768,\n screenMDMax: 991,\n screenMDMin: 768,\n screenSM: 576,\n screenSMMax: 767,\n screenSMMin: 576,\n screenXL: 1200,\n screenXLMax: 1599,\n screenXLMin: 1200,\n screenXS: 480,\n screenXSMax: 575,\n screenXSMin: 480,\n screenXXL: 1600,\n screenXXLMin: 1600,\n sizePopupArrow: 16,\n margin: 16,\n marginLG: 24,\n marginMD: 20,\n marginSM: 12,\n marginXL: 32,\n marginXS: 8,\n marginXXL: 48,\n marginXXS: 4,\n padding: 16,\n paddingLG: 24,\n paddingMD: 20,\n paddingSM: 12,\n paddingXL: 32,\n paddingXS: 8,\n paddingXXS: 4,\n paddingContentHorizontal: 16,\n paddingContentHorizontalLG: 24,\n paddingContentHorizontalSM: 16,\n paddingContentVertical: 12,\n paddingContentVerticalLG: 16,\n paddingContentVerticalSM: 8,\n controlPaddingHorizontal: 12,\n controlPaddingHorizontalSM: 8,\n },\n components: {\n Alert: {\n paddingContentHorizontalLG: 16, // Use standard padding instead of paddingLG when description is present\n },\n Breadcrumb: {\n itemColor: 'var(--j2-color-text-label)',\n lastItemColor: 'var(--j2-color-primary)',\n linkColor: 'inherit',\n linkHoverColor: 'var(--j2-color-link-hover)',\n colorBgTextHover: 'var(--j2-color-primary-bg-hover)',\n },\n Button: {\n defaultColor: 'var(--j2-color-primary-text)',\n defaultBorderColor: 'var(--j2-color-border)',\n defaultHoverBorderColor: 'var(--j2-color-primary-active)',\n defaultActiveBorderColor: 'var(--j2-color-primary-active)',\n ghostBg: '#fff',\n defaultGhostBorderColor: 'var(--j2-color-primary)',\n defaultGhostColor: 'var(--j2-color-primary-text)',\n textTextColor: 'var(--j2-color-primary-text)',\n textHoverBg: 'var(--j2-gray-2)',\n textTextHoverColor: 'var(--j2-color-primary-text-hover)',\n textTextActiveColor: 'var(--j2-color-primary-text-active)',\n },\n Form: {\n itemMarginBottom: 0,\n labelHeight: '100%',\n },\n Input: {\n activeBorderColor: 'var(--j2-color-primary-active)',\n },\n InputNumber: {\n handleVisible: true,\n handleHoverColor: 'var(--j2-color-primary-text)',\n handleBorderColor: 'var(--j2-color-border)',\n handleBg: 'var(--j2-color-bg-container-disabled)',\n },\n Menu: {\n itemColor: 'var(--j2-color-primary-text)',\n itemSelectedBg: 'var(--j2-color-primary)',\n itemSelectedColor: '#fff',\n itemMarginInline: 12,\n },\n Progress: {\n defaultColor: 'var(--j2-color-primary)',\n },\n Rate: {\n marginXS: 0,\n },\n Radio: {\n // Unselected outlined radio-button labels default to colorText (near-black);\n // align them with the selected label's primary blue so the control reads as\n // a single cohesive outlined-blue selector.\n buttonColor: 'var(--j2-color-primary)',\n },\n Select: {\n multipleItemBg: 'var(--j2-gray-2)',\n multipleItemBorderColor: 'var(--j2-gray-4)',\n colorText: 'var(--j2-color-primary-text)',\n },\n Tooltip: {\n colorBgSpotlight: 'var(--j2-color-primary-active)',\n },\n Table: {\n headerBg: 'var(--j2-color-bg-layout)',\n rowHoverBg: 'var(--j2-color-bg-layout)',\n bodySortBg: 'var(--j2-gray-2)',\n headerSortHoverBg: 'var(--j2-gray-3)',\n headerSortActiveBg: 'var(--j2-gray-3)',\n fixedHeaderSortActiveBg: 'var(--j2-gray-3)',\n },\n Tag: {\n defaultBg: 'var(--j2-color-fill-secondary)',\n },\n },\n}\n","import React from 'react'\nimport { ConfigProvider } from 'antd'\nimport { IconContext } from '@phosphor-icons/react'\nimport { appTheme } from './appTheme'\n\nexport const AppConfigProvider = ({\n children,\n}: {\n children: React.ReactNode\n}) => {\n return (\n <ConfigProvider theme={appTheme}>\n <IconContext.Provider value={{ weight: 'duotone', size: 16 }}>\n {children}\n </IconContext.Provider>\n </ConfigProvider>\n )\n}\n","import * as React from 'react'\nimport { Alert as AntdAlert, AlertProps, theme } from 'antd'\nimport {\n CheckCircleIcon,\n InfoIcon,\n WarningCircleIcon,\n XIcon,\n XCircleIcon,\n CircleNotchIcon,\n} from '@phosphor-icons/react'\nimport styles from './Alert.module.css'\ntype Props = Expand<Omit<AlertProps, 'type'>> & {\n description?: string\n type: 'success' | 'info' | 'warning' | 'error' | 'loading'\n closable?: boolean\n showIcon?: boolean\n banner?: boolean\n}\n\nconst Alert = ({\n description,\n type,\n closable = false,\n showIcon = true,\n banner = false,\n ...props\n}: Props) => {\n const { token } = theme.useToken()\n const icon = React.useMemo(() => {\n const size = description ? token.sizeLG : token.size\n const iconStyle = !description\n ? { display: 'flex', alignItems: 'center' }\n : undefined\n\n const iconElement = (() => {\n switch (type) {\n case 'success':\n return (\n <CheckCircleIcon fill=\"var(--j2-color-success-text)\" size={size} />\n )\n case 'error':\n return <XCircleIcon fill=\"var(--j2-color-error-text)\" size={size} />\n case 'info':\n return <InfoIcon fill=\"var(--j2-color-info-text)\" size={size} />\n case 'warning':\n return (\n <WarningCircleIcon\n fill=\"var(--j2-color-warning-text)\"\n size={size}\n />\n )\n case 'loading':\n return (\n <CircleNotchIcon\n fill=\"var(--j2-color-info-text)\"\n size={size}\n weight=\"regular\"\n style={{\n animation: 'spin 1s linear infinite',\n }}\n />\n )\n default:\n return null\n }\n })()\n\n return iconStyle ? (\n <span style={iconStyle}>{iconElement}</span>\n ) : (\n iconElement\n )\n }, [type, description, token.size, token.sizeLG])\n\n const antDType = React.useMemo(():\n 'success' | 'info' | 'warning' | 'error' => {\n switch (type) {\n case 'loading':\n return 'info'\n default:\n return type as 'success' | 'info' | 'warning' | 'error'\n }\n }, [type])\n\n return (\n <AntdAlert\n className={styles.alert}\n icon={icon}\n closable={closable}\n showIcon={showIcon}\n type={antDType}\n banner={banner}\n description={description}\n closeIcon={<XIcon size={token.size} weight=\"regular\" />}\n {...props}\n />\n )\n}\n\nexport { Alert }\n","import { theme } from 'antd'\nimport type * as Highcharts from 'highcharts'\nimport {\n Chart as HighchartsReact,\n type HighchartsReactRefObject,\n} from '@highcharts/react'\nimport '@highcharts/react/options/Accessibility.js'\nimport '@highcharts/react/options/Exporting.js'\nimport styles from './chart.module.css'\nimport { renderToString } from 'react-dom/server'\n\ntype Series = {\n name?: string\n data: Highcharts.PointOptionsObject[] | number[]\n color?: string\n hoverColor?: string\n}\n\ntype BarChartProps = {\n categories: string[]\n series: Series[]\n min: number\n max: number | undefined | null\n tickInterval: number | undefined\n tickFormat?: (value: number) => string\n xAxisTitle?: string\n yAxisTitle?: string\n gridLineColor?: string\n gridLineDashStyle?: Highcharts.DashStyleValue\n xAxisLabelMaxLines?: number\n tooltip: (\n category: string | number | undefined,\n value: number | null | undefined,\n seriesName: string | undefined\n ) => React.ReactNode\n chartRef?: React.RefObject<HighchartsReactRefObject>\n exporting?: Highcharts.ExportingOptions\n maxBars?: number\n barsWidth?: number\n height?: number\n width?: number\n}\n\nconst BarChart = ({\n categories,\n series,\n min,\n max,\n tickInterval,\n tickFormat,\n xAxisTitle,\n yAxisTitle,\n gridLineColor,\n gridLineDashStyle,\n xAxisLabelMaxLines,\n tooltip,\n exporting,\n chartRef,\n height,\n width,\n maxBars = 50,\n barsWidth = undefined,\n}: BarChartProps) => {\n const limitedCategories = categories.slice(0, maxBars)\n const limitedSeries = series.map((s) => ({\n ...s,\n data: s.data.slice(0, maxBars),\n }))\n\n const { token } = theme.useToken()\n\n const baseFont: Highcharts.CSSObject = {\n fontSize: `${token.fontSize}px`,\n fontFamily: token.fontFamily,\n color: token.colorText,\n }\n\n const options: Highcharts.Options = {\n credits: {\n enabled: false,\n },\n chart: {\n type: 'column',\n ...(height ? { height } : {}),\n ...(width ? { width } : {}),\n },\n plotOptions: {\n column: {\n borderRadius: series[0].data.length > 5 ? '20%' : '15%',\n ...(barsWidth !== undefined ? { pointWidth: barsWidth } : {}),\n },\n },\n exporting: {\n ...exporting,\n enabled: false,\n chartOptions: {\n ...exporting?.chartOptions,\n title: {\n align: 'left',\n text: exporting?.chartOptions?.title?.text,\n style: {\n fontSize: `${token.fontSize}px`,\n fontFamily: 'sans-serif',\n color: token.colorText,\n ...exporting?.chartOptions?.title?.style,\n },\n },\n series: limitedSeries.map((s) => ({\n type: 'column',\n color: s.color ? s.color : '#253761', // --j2-blue-9\n })),\n legend: exporting?.chartOptions?.legend || { enabled: false },\n },\n },\n title: {\n text: '',\n },\n xAxis: {\n categories: limitedCategories,\n title: xAxisTitle\n ? {\n text: xAxisTitle,\n style: { ...baseFont, color: token.colorTextDescription },\n }\n : undefined,\n labels: {\n y: 30,\n style: baseFont,\n ...(xAxisLabelMaxLines\n ? {\n useHTML: true,\n formatter: function (\n this: Highcharts.AxisLabelsFormatterContextObject\n ) {\n return `<div style=\"overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: ${xAxisLabelMaxLines}; -webkit-box-orient: vertical; text-align: center;\">${this.value}</div>`\n },\n }\n : {}),\n },\n },\n yAxis: {\n min: min,\n max: max,\n endOnTick: true,\n gridLineDashStyle: gridLineDashStyle || 'Dot',\n gridLineColor: gridLineColor || 'white',\n title: yAxisTitle\n ? {\n text: yAxisTitle,\n style: { ...baseFont, color: token.colorTextDescription },\n x: -10,\n }\n : undefined,\n tickInterval: tickInterval,\n labels: {\n formatter: tickFormat\n ? ({ value }) => tickFormat(value as number)\n : undefined,\n style: baseFont,\n },\n },\n legend: {\n enabled: false,\n },\n series: limitedSeries.map((s) => ({\n data: s.data,\n name: s.name,\n type: 'column',\n color: s.color || 'var(--j2-blue-11)',\n states: {\n hover: {\n color: s.hoverColor || token.colorPrimaryTextHover,\n },\n },\n })),\n tooltip: {\n useHTML: true,\n outside: true,\n backgroundColor: 'transparent',\n shadow: false,\n padding: 0,\n style: { zIndex: 9999 },\n formatter: function (this) {\n return renderToString(\n <div className={styles.tooltip}>\n {tooltip(this.key, this.y, this.series.name)}\n </div>\n )\n },\n },\n }\n\n return <HighchartsReact ref={chartRef} options={options} />\n}\n\nexport { BarChart }\n","import * as React from 'react'\nimport { Icon } from '@phosphor-icons/react'\nimport { Breadcrumb as AntdBreadcrumb, BreadcrumbProps } from 'antd'\n\ntype ItemConfig = {\n title: string\n icon?: Icon\n href?: string\n onClick?: React.MouseEventHandler\n}\nexport type Props = Expand<\n Omit<BreadcrumbProps, 'items'> & { items: ItemConfig[] }\n>\n\nconst Breadcrumb = ({ items, ...props }: Props) => {\n const antDItems = React.useMemo(\n () =>\n items.map((item) => ({\n href: item.href,\n onClick: item.onClick,\n title: (\n <span className=\"flex items-center gap-1\">\n {item.icon && <item.icon size={14} />}\n {item.title}\n </span>\n ),\n })),\n [items]\n )\n\n return <AntdBreadcrumb {...props} items={antDItems} />\n}\n\nexport { Breadcrumb }\n","import { Button as AntdButton, ButtonProps } from 'antd'\nimport './Button.css'\n\nexport type Props = Expand<ButtonProps>\n\nconst Button = ({ type, size, ghost, danger, shape, ...props }: Props) => {\n return (\n <AntdButton\n {...props}\n type={type}\n size={size}\n ghost={ghost}\n danger={danger}\n shape={shape}\n >\n {props.children}\n </AntdButton>\n )\n}\n\nexport { Button }\n","import { ReactNode } from 'react'\nimport cx from 'classnames'\nimport { Button } from '../button'\n\ntype BulkActionBarProps = {\n /**\n * Number of rows currently selected. The bar slides in when count > 0\n * and slides out when count returns to 0.\n */\n count: number\n /** Primary action (Archive, Restore, Delete, etc.). */\n action: {\n label: string\n icon?: ReactNode\n loading?: boolean\n onClick: () => void\n }\n /** Optional secondary actions rendered between the primary action and Cancel. */\n secondaryActions?: Array<{\n label: string\n icon?: ReactNode\n loading?: boolean\n onClick: () => void\n }>\n /** Clears the selection. Renders as the trailing \"Cancel\" button. */\n onCancel: () => void\n /** Custom Cancel label. Defaults to `\"Cancel\"`. */\n cancelLabel?: string\n}\n\n/**\n * Floating bulk-action toolbar. Renders fixed to the bottom-center of the\n * viewport and slides in whenever `count > 0`. Use it above any list/table\n * surface that supports row selection — pair with Ant Design's\n * `rowSelection` prop on `<Table>` (or any controlled selection state).\n *\n * Destructive intent is enforced by whatever confirmation modal the host\n * surface shows after `action.onClick` — the bar itself is always neutral\n * (text-on-navy) so it never reads as a one-click destructive control.\n */\nexport const BulkActionBar = ({\n count,\n action,\n secondaryActions,\n onCancel,\n cancelLabel = 'Cancel',\n}: BulkActionBarProps) => {\n const visible = count > 0\n const label = `${count} selected`\n\n return (\n <div\n role=\"region\"\n aria-label=\"Bulk actions\"\n aria-hidden={!visible}\n className={cx(\n 'pointer-events-none fixed bottom-6 left-1/2 z-50',\n '-translate-x-1/2 transition duration-200 ease-out',\n visible\n ? 'translate-y-0 opacity-100'\n : 'pointer-events-none translate-y-4 opacity-0'\n )}\n >\n <div\n className={cx(\n 'pointer-events-auto flex items-center gap-3 rounded-full',\n 'bg-j2-primary-active py-2 pl-4 pr-2 text-white shadow-lg'\n )}\n >\n <span className=\"text-sm font-medium\">{label}</span>\n <div className=\"h-5 w-px bg-white/20\" />\n <Button\n type=\"text\"\n shape=\"round\"\n size=\"small\"\n icon={action.icon}\n loading={action.loading}\n onClick={action.onClick}\n className=\"!text-white hover:!bg-white/10 hover:!text-white\"\n >\n {action.label}\n </Button>\n {secondaryActions?.map((sec) => (\n <Button\n key={sec.label}\n type=\"text\"\n shape=\"round\"\n size=\"small\"\n icon={sec.icon}\n loading={sec.loading}\n onClick={sec.onClick}\n className=\"!text-white hover:!bg-white/10 hover:!text-white\"\n >\n {sec.label}\n </Button>\n ))}\n <Button\n type=\"text\"\n shape=\"round\"\n size=\"small\"\n onClick={onCancel}\n className=\"!text-white hover:!bg-white/10 hover:!text-white\"\n >\n {cancelLabel}\n </Button>\n </div>\n </div>\n )\n}\n","import { Card as AntdCard, CardProps } from 'antd'\nimport cx from 'classnames'\n\n// import this file to enable styling defined in there\nimport './Card.css'\n\nexport type Props = Omit<CardProps, 'size'> & {\n /** Card title */\n title?: string\n /** Card contents */\n children: React.ReactNode\n /** Loading state */\n loading?: boolean\n /** Card size */\n size?: 'default' | 'small' | 'compact' | 'large'\n /**\n * Inner card type variant.\n * It allows inner card to have variants independent of other props.\n * Works only with type=\"inner\".\n */\n innerVariant?: 'default' | 'basic'\n}\n\nconst Card = ({\n title,\n children,\n loading,\n size = 'default',\n innerVariant = 'default',\n className,\n ...props\n}: Props) => {\n const isInner = props.type === 'inner'\n const isInnerBasic = isInner && innerVariant === 'basic'\n return (\n <AntdCard\n className={cx(\n 'j2-card',\n `j2-card-${size}`,\n isInnerBasic && 'inner-basic',\n className\n )}\n {...props}\n size={size === 'large' || size === 'compact' ? 'default' : size}\n title={title}\n loading={loading}\n >\n {children}\n </AntdCard>\n )\n}\n\nexport { Card }\n","import { Checkbox as AntdCheckbox, CheckboxProps } from 'antd'\n\ntype Props = Expand<CheckboxProps>\n\nexport const Checkbox = (props: Props) => {\n return <AntdCheckbox {...props} />\n}\n\nCheckbox.Group = AntdCheckbox.Group\n","import { CheckboxTreeDataNode } from './CheckboxTree'\n\nexport const getLeafKeys = (\n node: CheckboxTreeDataNode\n): (string | number)[] => {\n const keys: (string | number)[] = []\n const traverse = (currentNode: CheckboxTreeDataNode) => {\n if (!currentNode.children || currentNode.children.length === 0) {\n // This is a leaf node\n keys.push(currentNode.key)\n } else {\n // This is a parent node, traverse children\n currentNode.children.forEach((child) => traverse(child))\n }\n }\n traverse(node)\n return keys\n}\n\nexport const getAllLeafKeys = (\n nodes: CheckboxTreeDataNode[]\n): (string | number)[] => {\n const keys: (string | number)[] = []\n nodes.forEach((node) => {\n keys.push(...getLeafKeys(node))\n })\n return keys\n}\n\nexport const getNodeCheckState = (\n node: CheckboxTreeDataNode,\n leafNodeStates: Record<string | number, boolean>\n): { checked: boolean; indeterminate: boolean } => {\n let hasChecked = false\n let hasUnchecked = false\n const visit = (current: CheckboxTreeDataNode): boolean => {\n if (!current.children || current.children.length === 0) {\n if (leafNodeStates[current.key] === true) {\n hasChecked = true\n } else {\n hasUnchecked = true\n }\n return hasChecked && hasUnchecked\n }\n return current.children.some(visit)\n }\n visit(node)\n return {\n checked: hasChecked && !hasUnchecked,\n indeterminate: hasChecked && hasUnchecked,\n }\n}\n\nexport const getAllParentKeys = (\n nodes: CheckboxTreeDataNode[]\n): (string | number)[] => {\n const keys: (string | number)[] = []\n const traverse = (currentNodes: CheckboxTreeDataNode[]) => {\n currentNodes.forEach((node) => {\n if (node.children && node.children.length > 0) {\n keys.push(node.key)\n traverse(node.children)\n }\n })\n }\n traverse(nodes)\n return keys\n}\n\nexport const findNode = (\n key: string | number,\n nodes: CheckboxTreeDataNode[]\n): CheckboxTreeDataNode | null => {\n for (const node of nodes) {\n if (node.key === key) {\n return node\n }\n if (node.children) {\n const found = findNode(key, node.children)\n if (found) return found\n }\n }\n return null\n}\n","import { CaretDownIcon } from '@phosphor-icons/react'\nimport { Checkbox } from '../checkbox'\nimport { CheckboxTreeDataNode } from './CheckboxTree'\nimport { getNodeCheckState } from './utils'\n\ntype TreeNodeProps = {\n node: CheckboxTreeDataNode\n level: number\n leafNodeValues: Record<string | number, boolean>\n onCheck: (\n key: string | number,\n checked: boolean,\n node: CheckboxTreeDataNode\n ) => void\n disabled: boolean\n expandedKeys: Set<string | number>\n onToggleExpand: (key: string | number) => void\n lazyChildren: boolean\n}\n\nexport const TreeNode = ({\n node,\n level,\n leafNodeValues,\n onCheck,\n disabled,\n expandedKeys,\n onToggleExpand,\n lazyChildren,\n}: TreeNodeProps) => {\n const { checked: isChecked, indeterminate } = getNodeCheckState(\n node,\n leafNodeValues\n )\n const isIndeterminate = lazyChildren && indeterminate\n const isDisabled = disabled || node.disabled\n const hasChildren = node.children && node.children.length > 0\n const isExpanded = expandedKeys.has(node.key)\n\n return (\n <div>\n <div\n className=\"flex items-center min-h-6 mb-1\"\n style={{ paddingLeft: level * 20 }}\n >\n <Checkbox\n checked={isChecked}\n indeterminate={isIndeterminate}\n disabled={isDisabled}\n onChange={(e) => onCheck(node.key, e.target.checked, node)}\n >\n {node.title}\n </Checkbox>\n {hasChildren && !isDisabled && (\n <button\n type=\"button\"\n onClick={() => onToggleExpand(node.key)}\n className=\"flex items-center justify-center ml-auto cursor-pointer bg-transparent border-none p-0\"\n aria-expanded={isExpanded}\n aria-label={`${isExpanded ? 'Collapse' : 'Expand'}${typeof node.title === 'string' ? ` ${node.title}` : ''}`}\n >\n <CaretDownIcon\n size={14}\n style={{\n transform: `rotate(${isExpanded ? 0 : -90}deg)`,\n transition: 'transform 150ms ease',\n }}\n />\n </button>\n )}\n </div>\n\n {hasChildren && (\n <div\n style={{\n display: 'grid',\n gridTemplateRows: isExpanded ? '1fr' : '0fr',\n transition: 'grid-template-rows 150ms ease',\n }}\n >\n <div style={{ overflow: 'hidden' }}>\n {(!lazyChildren || isExpanded) &&\n node.children!.map((childNode) => (\n <TreeNode\n key={childNode.key}\n node={childNode}\n level={level + 1}\n leafNodeValues={leafNodeValues}\n onCheck={onCheck}\n disabled={disabled}\n expandedKeys={expandedKeys}\n onToggleExpand={onToggleExpand}\n lazyChildren={lazyChildren}\n />\n ))}\n </div>\n </div>\n )}\n </div>\n )\n}\n","import React, { useState, useCallback, useEffect, useMemo } from 'react'\nimport { TreeNode } from './TreeNode'\nimport { getLeafKeys, getAllLeafKeys, getAllParentKeys } from './utils'\n\nexport type CheckboxTreeDataNode = {\n key: string | number\n title: React.ReactNode\n children?: CheckboxTreeDataNode[]\n disabled?: boolean\n}\n\nexport type CheckboxTreeProps = {\n treeData: CheckboxTreeDataNode[]\n defaultCheckedKeys?: (string | number)[]\n checkedKeys?: (string | number)[]\n onCheck?: (\n values: Record<string | number, boolean>,\n info: {\n checked: boolean\n checkedLeafNodes: Record<string | number, CheckboxTreeDataNode>\n allCheckedNodes: CheckboxTreeDataNode[]\n node: CheckboxTreeDataNode\n }\n ) => void\n disabled?: boolean\n defaultExpandAll?: boolean\n defaultExpandedKeys?: (string | number)[]\n expandedKeys?: (string | number)[]\n onExpand?: (expandedKeys: (string | number)[]) => void\n className?: string\n style?: React.CSSProperties\n lazyChildren?: boolean\n}\n\nexport const CheckboxTree = ({\n treeData,\n defaultCheckedKeys = [],\n checkedKeys: controlledCheckedKeys,\n onCheck,\n disabled = false,\n defaultExpandAll = true,\n defaultExpandedKeys,\n expandedKeys: controlledExpandedKeys,\n onExpand,\n className,\n style,\n lazyChildren = false,\n}: CheckboxTreeProps) => {\n const allLeafKeys = useMemo(() => getAllLeafKeys(treeData), [treeData])\n const leafKeySet = useMemo(() => new Set(allLeafKeys), [allLeafKeys])\n\n const [internalLeafNodeValues, setInternalLeafNodeValues] = useState<\n Record<string | number, boolean>\n >(() => {\n const defaultLeafKeySet = new Set(\n defaultCheckedKeys.filter((key) => leafKeySet.has(key))\n )\n const values: Record<string | number, boolean> = {}\n for (const key of allLeafKeys) {\n values[key] = defaultLeafKeySet.has(key)\n }\n return values\n })\n\n const [internalExpandedKeys, setInternalExpandedKeys] = useState<\n (string | number)[]\n >(() => {\n if (defaultExpandedKeys) return defaultExpandedKeys\n if (defaultExpandAll) return getAllParentKeys(treeData)\n return []\n })\n\n // When defaultExpandAll is true and treeData changes, auto-expand new parent nodes\n useEffect(() => {\n if (controlledExpandedKeys || !defaultExpandAll || defaultExpandedKeys)\n return\n const allParentKeys = getAllParentKeys(treeData)\n setInternalExpandedKeys((prev) => {\n const prevSet = new Set(prev)\n const newKeys = allParentKeys.filter((key) => !prevSet.has(key))\n if (newKeys.length === 0) return prev\n return [...prev, ...newKeys]\n })\n }, [treeData, defaultExpandAll, controlledExpandedKeys, defaultExpandedKeys])\n\n const expandedKeysSet = useMemo(() => {\n const keys = controlledExpandedKeys ?? internalExpandedKeys\n return new Set(keys)\n }, [controlledExpandedKeys, internalExpandedKeys])\n\n const handleToggleExpand = useCallback(\n (key: string | number) => {\n const currentKeys = controlledExpandedKeys ?? internalExpandedKeys\n const newKeys = currentKeys.includes(key)\n ? currentKeys.filter((k) => k !== key)\n : [...currentKeys, key]\n\n if (!controlledExpandedKeys) {\n setInternalExpandedKeys(newKeys)\n }\n onExpand?.(newKeys)\n },\n [controlledExpandedKeys, internalExpandedKeys, onExpand]\n )\n\n const leafNodeValues: Record<string | number, boolean> = useMemo(() => {\n if (!controlledCheckedKeys) {\n return internalLeafNodeValues\n }\n\n const controlledLeafKeySet = new Set(\n controlledCheckedKeys.filter((key) => leafKeySet.has(key))\n )\n\n const values: Record<string | number, boolean> = {}\n for (const key of allLeafKeys) {\n values[key] = controlledLeafKeySet.has(key)\n }\n return values\n }, [allLeafKeys, leafKeySet, controlledCheckedKeys, internalLeafNodeValues])\n\n const handleCheck = useCallback(\n (_key: string | number, checked: boolean, node: CheckboxTreeDataNode) => {\n const newLeafNodeValues = { ...leafNodeValues }\n\n if (checked) {\n // When checking, set all leaf descendants to true\n const leafKeys = getLeafKeys(node)\n leafKeys.forEach((leafKey) => (newLeafNodeValues[leafKey] = true))\n } else {\n // When unchecking, set all leaf descendants to false\n const leafKeys = getLeafKeys(node)\n leafKeys.forEach((leafKey) => (newLeafNodeValues[leafKey] = false))\n }\n\n if (!controlledCheckedKeys) {\n setInternalLeafNodeValues(newLeafNodeValues)\n }\n\n if (onCheck) {\n // Get all checked leaf nodes\n const checkedLeafNodes: Record<string | number, CheckboxTreeDataNode> =\n {}\n\n // Get all nodes that appear checked (including parents)\n const allCheckedNodes: CheckboxTreeDataNode[] = []\n\n const collectChecked = (current: CheckboxTreeDataNode): boolean => {\n let isChecked: boolean\n if (!current.children || current.children.length === 0) {\n isChecked = newLeafNodeValues[current.key] === true\n if (isChecked) {\n checkedLeafNodes[current.key] = current\n }\n } else {\n isChecked = true\n for (const child of current.children) {\n if (!collectChecked(child)) {\n isChecked = false\n }\n }\n }\n if (isChecked) {\n allCheckedNodes.push(current)\n }\n return isChecked\n }\n treeData.forEach(collectChecked)\n\n onCheck(newLeafNodeValues, {\n checked,\n checkedLeafNodes,\n allCheckedNodes,\n node,\n })\n }\n },\n [controlledCheckedKeys, onCheck, treeData, leafNodeValues]\n )\n\n return (\n <div className={className} style={style}>\n {treeData.map((node) => (\n <TreeNode\n key={node.key}\n node={node}\n level={0}\n leafNodeValues={leafNodeValues}\n onCheck={handleCheck}\n disabled={disabled}\n expandedKeys={expandedKeysSet}\n onToggleExpand={handleToggleExpand}\n lazyChildren={lazyChildren}\n />\n ))}\n </div>\n )\n}\n","import * as React from 'react'\nimport { Collapse as AntdCollapse, CollapseProps } from 'antd'\nimport {\n CaretDownIcon,\n InfoIcon,\n WarningCircleIcon,\n XCircleIcon,\n} from '@phosphor-icons/react'\nimport styles from './Collapse.module.css'\n\nexport type CollapseState = 'default' | 'warning' | 'error'\n\nexport type Props = Expand<CollapseProps> & {\n state?: CollapseState\n showIcon?: boolean\n}\n\nconst stateConfig: Record<\n CollapseState,\n { className: string; Icon: React.ElementType; color: string }\n> = {\n default: {\n className: styles.default,\n Icon: InfoIcon,\n color: 'var(--j2-color-text)',\n },\n warning: {\n className: styles.warning,\n Icon: WarningCircleIcon,\n color: 'var(--j2-color-warning-text)',\n },\n error: {\n className: styles.error,\n Icon: XCircleIcon,\n color: 'var(--j2-color-error-text)',\n },\n}\n\nconst Collapse = ({\n state = 'default',\n showIcon = false,\n className,\n items,\n ...props\n}: Props) => {\n const { className: stateClass, Icon, color } = stateConfig[state]\n\n const icon = React.useMemo(() => {\n if (!showIcon) return null\n return <Icon size={14} fill={color} style={{ flexShrink: 0 }} />\n }, [state, showIcon])\n\n const itemsWithIcon = React.useMemo(() => {\n if (!icon || !items) return items\n return (items as NonNullable<CollapseProps['items']>).map((item) => ({\n ...item,\n label: (\n <>\n {icon}\n {item.label}\n </>\n ),\n }))\n }, [items, icon])\n\n return (\n <AntdCollapse\n {...props}\n items={itemsWithIcon}\n className={[stateClass, className].filter(Boolean).join(' ')}\n expandIcon={({ isActive }) => (\n <CaretDownIcon\n size={14}\n style={{ transform: `rotate(${isActive ? 0 : -90}deg)` }}\n />\n )}\n />\n )\n}\n\nexport { Collapse }\n","import { Drawer as AntdDrawer, DrawerProps, Space } from 'antd'\nimport { Button } from '../button'\nimport { XIcon } from '@phosphor-icons/react'\nimport './Drawer.css'\n\ntype AllProps = Omit<DrawerProps, 'extra' | 'closable'> & {\n fillPage?: boolean\n footer?: React.ReactNode\n extraContent?: React.ReactNode\n}\n\nexport type Props = Expand<AllProps>\n\nexport const Drawer = ({\n fillPage = false,\n footer,\n extraContent,\n ...props\n}: Props) => {\n return (\n <AntdDrawer\n {...props}\n closable={false}\n {...(fillPage && { height: '100vh', width: '100vw' })}\n {...(footer && { footer })}\n extra={\n <Space>\n {extraContent}\n <Button\n className=\"p-0\"\n type=\"link\"\n onClick={props.onClose}\n aria-label=\"Close\"\n >\n <XIcon size={22} weight=\"regular\" />\n </Button>\n </Space>\n }\n className=\"j2-drawer\"\n />\n )\n}\n","import { Dropdown as AntdDropdown, DropdownProps, Typography } from 'antd'\nimport cx from 'classnames'\nimport { Button } from '../button'\nimport { CaretDownIcon } from '@phosphor-icons/react'\nimport './Dropdown.css'\n\nconst { Link } = Typography\n\nexport type Props = DropdownProps & {\n type?: 'basic' | 'basic-inline' | 'twofold'\n label?: string\n icon?: React.ReactNode\n menuType?: 'default' | 'slim'\n targetClassName?: string\n}\n\nexport type TargetProps = {\n label?: string\n type?: 'basic' | 'basic-inline' | 'twofold'\n disabled?: boolean\n icon?: React.ReactNode\n className?: string\n}\n\nconst LabelWithCaret = ({ label }: { label: string | undefined }) => (\n <div className=\"flex items-center gap-2\">\n {label}\n <CaretDownIcon weight=\"regular\" />\n </div>\n)\n\nconst Target = ({ label, type, disabled, icon, className }: TargetProps) => {\n if (type === 'basic-inline') {\n return (\n <Link disabled={disabled} className={cx('flex gap-1', className)}>\n {icon ? (\n <>\n {icon}\n {label}\n </>\n ) : (\n <LabelWithCaret label={label} />\n )}\n </Link>\n )\n }\n\n return (\n <Button disabled={disabled} icon={icon} className={className}>\n {icon ? label : <LabelWithCaret label={label} />}\n </Button>\n )\n}\n\nconst Dropdown = ({\n label,\n type,\n icon,\n menu,\n menuType = 'default',\n targetClassName,\n ...props\n}: Props) => {\n let menuProp = menu\n\n if (menuType === 'slim' && typeof menu === 'object') {\n menuProp = {\n ...menu,\n className: cx(menu.className, 'j2-dropdown-slim-menu'),\n }\n }\n\n if (type === 'twofold') {\n return (\n <AntdDropdown.Button {...props} menu={menuProp}>\n {icon ? (\n <>\n {icon} {label}\n </>\n ) : (\n label\n )}\n </AntdDropdown.Button>\n )\n }\n\n return (\n <AntdDropdown {...props} menu={menuProp}>\n <div>\n <Target\n label={label}\n type={type}\n disabled={props.disabled}\n icon={icon}\n className={targetClassName}\n />\n </div>\n </AntdDropdown>\n )\n}\n\nexport { Dropdown }\n","import { Filter } from './types'\n\nexport const isEmptyFilter = (filter: Filter) => {\n if (filter.operator === 'blank' || filter.operator === 'notBlank') {\n return false\n }\n\n if (\n filter.values &&\n filter.values.length > 0 &&\n filter.values.every(\n (value) => value !== '' && value !== undefined && value !== null\n )\n ) {\n return false\n }\n\n return true\n}\n\nexport const isValidFilter = (filter: Filter) => {\n return validateFilterField(filter).length === 0\n}\n\nexport const validateFilterField = (\n filter: Filter\n): { field: string; message: string }[] => {\n const errors = []\n\n if (!filter.operator) {\n errors.push({ field: filter.field, message: 'Operator is required' })\n return errors\n }\n\n if (isEmptyFilter(filter)) {\n errors.push({ field: filter.field, message: 'Value is required' })\n }\n\n if (filter.type === 'number' && filter.operator === 'inRange') {\n if (filter.values && filter.values.length !== 2) {\n errors.push({ field: filter.field, message: 'Value is required' })\n }\n }\n\n return errors\n}\n\nimport { FormFilter } from './types'\n\nexport const isEmptyFormFilter = (filter: FormFilter) => {\n if (filter.operator === 'blank' || filter.operator === 'notBlank') {\n return false\n }\n\n if (\n filter.values &&\n filter.values.length > 0 &&\n filter.values.every(\n (value) => value !== '' && value !== undefined && value !== null\n )\n ) {\n return false\n }\n\n return true\n}\n\nexport const isValidFormFilter = (filter: FormFilter) => {\n return validateFormFilter(filter).length === 0\n}\n\nexport const validateFormFilter = (filter: FormFilter): string[] => {\n const errors = []\n\n if (!filter.operator) {\n errors.push('Operator is required')\n return errors\n }\n\n if (isEmptyFormFilter(filter)) {\n errors.push('Value is required')\n }\n\n if (filter.type === 'number' && filter.operator === 'inRange') {\n if (filter.values && filter.values.length !== 2) {\n errors.push('Value is required')\n }\n }\n\n return errors\n}\n\nexport const isFilter = (filter: FormFilter): filter is Filter => {\n return (\n filter.operator !== undefined &&\n filter.field !== undefined &&\n filter.type !== undefined\n )\n}\n","import * as React from 'react'\nimport {\n FilterConfig,\n FilterType,\n FormFilter,\n NumberOptionsType,\n Operator,\n SelectOptionsType,\n} from './types'\nimport { validateFormFilter } from './filterHelpers'\nexport type UseFilterFieldInputs = {\n filterConfigs: FilterConfig[]\n filter?: FormFilter\n}\n\ntype UseFilterFieldOutputs = {\n filter: FormFilter | undefined\n config: FilterConfig | undefined\n operatorOptions: { label: string; value: string }[]\n valueInputConfig: ValueInputConfig | undefined\n handleFieldChange: (value: string) => void\n handleOperatorChange: (value: string) => void\n handleValuesChange: (value: (string | number | undefined | null)[]) => void\n}\n\nexport const TypeToOperatorOptions: Record<\n FilterType,\n { label: string; value: Operator }[]\n> = {\n select: [\n { label: 'is any of', value: 'equals' },\n { label: 'is not any of', value: 'notEqual' },\n { label: 'has no value', value: 'blank' },\n { label: 'has any value', value: 'notBlank' },\n ],\n number: [\n { label: 'is', value: 'equals' },\n { label: 'is not', value: 'notEqual' },\n { label: 'is greater than', value: 'greaterThan' },\n { label: 'is greater than or equal to', value: 'greaterThanOrEqual' },\n { label: 'is less than', value: 'lessThan' },\n { label: 'is less than or equal to', value: 'lessThanOrEqual' },\n { label: 'has no value', value: 'blank' },\n { label: 'has any value', value: 'notBlank' },\n { label: 'is between', value: 'inRange' },\n ],\n text: [\n { label: 'contains', value: 'contains' },\n { label: 'does not contain', value: 'notContains' },\n { label: 'starts with', value: 'startsWith' },\n { label: 'ends with', value: 'endsWith' },\n { label: 'has no value', value: 'blank' },\n { label: 'has any value', value: 'notBlank' },\n ],\n}\n\ntype SelectValueInputConfig = {\n type: 'select'\n valueOptions: { label: string; value: string }[]\n}\n\ntype NumberValueInputConfig = {\n type: 'number'\n inputCount: number\n numberOptions?: { max: number; min: number; step: number }\n}\n\ntype TextValueInputConfig = {\n type: 'text'\n}\n\nexport type ValueInputConfig =\n SelectValueInputConfig | NumberValueInputConfig | TextValueInputConfig\n\ntype FilterFieldState = {\n filter: FormFilter | undefined\n filterConfigs: FilterConfig[]\n config: FilterConfig | undefined\n operatorOptions: { label: string; value: string }[]\n valueInputConfig: ValueInputConfig | undefined\n}\n\ntype Action = {\n type: 'setField' | 'setOperator' | 'initialize'\n payload: string | undefined\n}\ntype SetValuesAction = {\n type: 'setValues'\n payload: (string | number | undefined | null)[]\n}\n\nconst buildValueInputConfig = (\n config: FilterConfig,\n operator: string\n): ValueInputConfig | undefined => {\n if (config.type === 'select') {\n if (operator === 'blank' || operator === 'notBlank') return\n\n return {\n type: 'select',\n valueOptions: (config.options as SelectOptionsType) || [],\n }\n }\n\n if (config.type === 'number') {\n if (operator === 'blank' || operator === 'notBlank') return\n\n return {\n type: 'number',\n inputCount: operator === 'inRange' ? 2 : 1,\n numberOptions: config.options as NumberOptionsType,\n }\n }\n\n if (config.type === 'text') {\n if (operator === 'blank' || operator === 'notBlank') return\n\n return {\n type: 'text',\n }\n }\n}\n\nconst filterFieldReducer = (\n state: FilterFieldState,\n action: Action | SetValuesAction\n) => {\n switch (action.type) {\n case 'setField': {\n const config = state.filterConfigs.find(\n (config) => config.field === action.payload\n )\n\n if (!config) return state\n\n const operatorOptions = config ? TypeToOperatorOptions[config.type] : []\n\n const newFilter = {\n ...state.filter,\n type: config.type,\n field: action.payload,\n operator: operatorOptions[0].value,\n values: [],\n } as FormFilter\n\n const pendingFilter = {\n ...newFilter,\n errors: validateFormFilter(newFilter),\n }\n\n return {\n ...state,\n filter: pendingFilter,\n config,\n operatorOptions,\n valueInputConfig:\n operatorOptions.length > 0\n ? buildValueInputConfig(config, operatorOptions[0].value)\n : undefined,\n }\n }\n case 'setOperator': {\n if (!state.config) return state\n if (!action.payload) return state\n\n const pendingFilter = {\n ...state.filter,\n operator: action.payload,\n values: [],\n } as FormFilter\n\n return {\n ...state,\n filter: {\n ...pendingFilter,\n errors: validateFormFilter(pendingFilter),\n },\n valueInputConfig: buildValueInputConfig(state.config, action.payload),\n }\n }\n case 'setValues': {\n if (!state.filter) return state\n\n const values =\n state.filter.type === 'number'\n ? action.payload.map((value) => Number(value))\n : (action.payload.filter(\n (value) => value !== null && value !== undefined\n ) as string[])\n\n const pendingFilter = {\n ...state.filter,\n values: values,\n }\n\n pendingFilter.errors = validateFormFilter(pendingFilter)\n\n return {\n ...state,\n filter: pendingFilter,\n }\n }\n case 'initialize': {\n const field =\n state.filter?.field ||\n state.filterConfigs.find((config) => !config.disabled)?.field\n const config = state.filterConfigs.find(\n (config) => config.field === field\n )\n\n if (!config) return state\n\n const operatorOptions = config ? TypeToOperatorOptions[config.type] : []\n\n const operator = state.filter?.operator || operatorOptions[0].value\n\n const filter =\n state.filter ??\n ({\n field,\n type: config.type,\n operator,\n values: [],\n } as FormFilter)\n\n const errors = validateFormFilter(filter)\n filter.errors = errors\n\n return {\n ...state,\n config,\n filter,\n operatorOptions,\n valueInputConfig:\n operatorOptions.length > 0\n ? buildValueInputConfig(config, operator)\n : undefined,\n }\n }\n default:\n return state\n }\n}\n\nexport const useFilterField = ({\n filterConfigs,\n filter: initialFilter,\n}: UseFilterFieldInputs): UseFilterFieldOutputs => {\n const [{ filter, config, operatorOptions, valueInputConfig }, dispatch] =\n React.useReducer(\n filterFieldReducer,\n {\n filter: initialFilter,\n filterConfigs,\n config: undefined,\n operatorOptions: [],\n valueInputConfig: undefined,\n },\n (state) => {\n return filterFieldReducer(state, {\n type: 'initialize',\n payload: undefined,\n })\n }\n )\n\n const handleFieldChange = (value: string) => {\n dispatch({\n type: 'setField',\n payload: value,\n })\n }\n\n const handleOperatorChange = (value: string) => {\n dispatch({\n type: 'setOperator',\n payload: value,\n })\n }\n\n const handleValuesChange = (\n value: (string | number | undefined | null)[]\n ) => {\n dispatch({\n type: 'setValues',\n payload: value,\n })\n }\n\n return {\n filter,\n config,\n operatorOptions,\n valueInputConfig,\n handleFieldChange,\n handleOperatorChange,\n handleValuesChange,\n }\n}\n","import * as React from 'react'\nimport { FilterConfig } from '.'\nimport { useFilterField } from './useFilterField'\nimport { Input, InputNumber, Select } from 'antd'\nimport { FormFilter } from './types'\nimport cx from 'classnames'\nimport { SizeType } from 'antd/es/config-provider/SizeContext'\n\ntype SelectValueInputConfig = {\n type: 'select'\n valueOptions: { label: string; value: string }[]\n}\n\ntype NumberValueInputConfig = {\n type: 'number'\n inputCount: number\n numberOptions?: { max: number; min: number; step: number }\n}\n\ntype TextValueInputConfig = {\n type: 'text'\n}\n\ntype ValueInputConfig =\n SelectValueInputConfig | NumberValueInputConfig | TextValueInputConfig\n\ntype FilterInputProps = {\n value?: FormFilter\n filterConfigs: FilterConfig[]\n onChange?: (value: FormFilter) => void\n onBlur?: (value: FormFilter) => void\n className?: string\n size?: SizeType\n}\n\nexport const FilterInput = ({\n value,\n filterConfigs,\n onChange,\n onBlur,\n className,\n size = 'middle',\n}: FilterInputProps) => {\n const {\n filter,\n operatorOptions,\n valueInputConfig,\n handleFieldChange,\n handleOperatorChange,\n handleValuesChange,\n } = useFilterField({\n filterConfigs,\n filter: value,\n })\n\n const fieldOptions = filterConfigs.map((config) => ({\n label: config.label,\n value: config.field,\n disabled: config.disabled,\n }))\n\n const handleBlur = () => {\n if (filter) {\n onBlur?.(filter)\n }\n }\n\n // Track if this is a user-driven change (not initialization)\n const isInitialMount = React.useRef(true)\n const prevFilterRef = React.useRef(filter)\n\n React.useEffect(() => {\n // Skip the initial mount to avoid calling onChange during initialization\n if (isInitialMount.current) {\n isInitialMount.current = false\n prevFilterRef.current = filter\n return\n }\n\n // Only call onChange if the filter actually changed\n if (filter && filter !== prevFilterRef.current) {\n prevFilterRef.current = filter\n onChange?.(filter)\n }\n }, [filter, onChange])\n\n return (\n <div className={cx('grid grid-cols-3 gap-2', className)}>\n <Select\n options={fieldOptions}\n value={filter?.field}\n showSearch\n optionFilterProp=\"label\"\n onChange={handleFieldChange}\n size={size}\n />\n <div className=\"col-span-2 flex gap-2\">\n <Select\n options={operatorOptions}\n value={filter?.operator}\n onChange={handleOperatorChange}\n onBlur={handleBlur}\n size={size}\n popupMatchSelectWidth={false}\n />\n {valueInputConfig && (\n <ValueInput\n valueInputConfig={valueInputConfig}\n values={filter?.values}\n onChange={handleValuesChange}\n onBlur={handleBlur}\n size={size}\n />\n )}\n </div>\n </div>\n )\n}\n\ntype ValueInputProps = {\n valueInputConfig: ValueInputConfig\n values?: (string | number | undefined | null)[]\n onChange: (value: (string | number | undefined | null)[]) => void\n onBlur: () => void\n size: SizeType\n}\n\nconst ValueInput = ({\n valueInputConfig,\n values,\n onChange,\n onBlur,\n size,\n}: ValueInputProps) => {\n const handleChange = (value: string | number | null) => {\n if (value === null) {\n onChange([])\n } else {\n onChange([value])\n }\n }\n\n const handleNumberChange = (value: string | number | null, index: number) => {\n const newValues: (string | number | undefined | null)[] = [\n ...(values ?? []),\n ]\n newValues[index] = value\n onChange(newValues)\n }\n\n switch (valueInputConfig.type) {\n case 'select':\n return (\n <Select\n options={valueInputConfig.valueOptions}\n onChange={onChange}\n showSearch\n allowClear\n mode=\"multiple\"\n onBlur={onBlur}\n value={values}\n className=\"w-full truncate\"\n size={size}\n optionFilterProp=\"label\"\n />\n )\n case 'number':\n return (\n <div className=\"flex gap-2 grow\">\n {Array.from({ length: valueInputConfig.inputCount }).map(\n (_, index) => (\n <React.Fragment key={`number-input-${index}`}>\n {index !== 0 && <span className=\"my-auto\">and</span>}\n <InputNumber\n onChange={(value) => handleNumberChange(value, index)}\n onBlur={onBlur}\n value={values?.[index]}\n className=\"basis-1/2\"\n size={size}\n {...(valueInputConfig.numberOptions ?? {})}\n />\n </React.Fragment>\n )\n )}\n </div>\n )\n case 'text':\n return (\n <Input\n onBlur={onBlur}\n value={values?.[0] ?? undefined}\n onChange={(e) => handleChange(e.target.value)}\n className=\"w-full\"\n size={size}\n />\n )\n default:\n return null\n }\n}\n","import { useReducer } from 'react'\nimport { FilterForm, FilterGroup, FormFilter } from './types'\nimport { cloneDeep } from 'lodash'\nimport { isEmptyFormFilter } from './filterHelpers'\n\ntype UseFiltersFormInput = {\n initialValues?: FilterForm\n}\n\ntype UseFiltersFormOutput = {\n dispatch: (action: Action) => void\n filterGroups: FilterGroup[]\n newFilter: FormFilter | undefined\n isNewFilterInputOpen: boolean\n isValid: boolean\n isEmpty: boolean\n}\n\ntype FilterFormState = {\n filterGroups: FilterGroup[]\n newFilter: FormFilter | undefined\n isNewFilterInputOpen: boolean\n}\n\ntype InitializeAction = {\n type: 'initialize'\n payload: FilterForm | undefined\n}\n\ntype OpenNewFilterInputAction = {\n type: 'openNewFilterInput'\n}\n\ntype AddNewFilterAction = {\n type: 'addNewFilter'\n payload: FormFilter\n}\n\ntype ChangeNewFilterAction = {\n type: 'changeNewFilter'\n payload: FormFilter\n}\n\ntype RemoveNewFilterAction = {\n type: 'removeNewFilter'\n}\n\ntype ClearAllFiltersAction = {\n type: 'clearAllFilters'\n}\n\ntype UpdateFilterAction = {\n type: 'updateFilter'\n payload: {\n groupIndex: number\n filterIndex: number\n filter: FormFilter\n }\n}\n\ntype ChangeFilterAction = {\n type: 'changeFilter'\n payload: {\n groupIndex: number\n filterIndex: number\n filter: FormFilter\n }\n}\n\ntype RemoveFilterAction = {\n type: 'removeFilter'\n payload: {\n groupIndex: number\n filterIndex: number\n }\n}\n\ntype Action =\n | AddNewFilterAction\n | UpdateFilterAction\n | ClearAllFiltersAction\n | ChangeNewFilterAction\n | OpenNewFilterInputAction\n | ChangeFilterAction\n | RemoveFilterAction\n | InitializeAction\n | RemoveNewFilterAction\n\nconst copyFilterGroups = (filterGroups: FilterGroup[]): FilterGroup[] => {\n return cloneDeep(filterGroups)\n}\n\nconst addFilter = (\n filter: FormFilter,\n filterGroups: FilterGroup[]\n): FilterGroup[] => {\n const copy = copyFilterGroups(filterGroups)\n const filterGroupIndex = copy.findIndex(\n (filterGroup) => filterGroup.field === filter.field\n )\n\n if (filterGroupIndex === -1) {\n copy.push({ field: filter.field, filters: [filter] })\n } else {\n copy[filterGroupIndex].filters.push(filter)\n }\n\n return copy\n}\n\nconst removeFilter = (\n groupIndex: number,\n filterIndex: number,\n filterGroups: FilterGroup[]\n): FilterGroup[] => {\n const copy = copyFilterGroups(filterGroups)\n copy[groupIndex].filters.splice(filterIndex, 1)\n\n return copy.filter((group) => group.filters.length > 0)\n}\n\nconst filterFormReducer = (state: FilterFormState, action: Action) => {\n switch (action.type) {\n case 'initialize': {\n const filterGroups = action.payload?.filters.reduce(\n (acc, filter) => {\n return addFilter(filter, acc)\n },\n [...state.filterGroups]\n )\n\n return {\n ...state,\n filterGroups: filterGroups ?? [],\n isNewFilterInputOpen: !filterGroups?.length,\n }\n }\n case 'openNewFilterInput': {\n return {\n ...state,\n isNewFilterInputOpen: true,\n }\n }\n case 'addNewFilter': {\n if (action.payload.errors && action.payload.errors.length > 0) {\n return state\n }\n\n const filterGroups = addFilter(action.payload, state.filterGroups)\n\n return {\n ...state,\n filterGroups,\n newFilter: undefined,\n isNewFilterInputOpen: false,\n }\n }\n case 'changeNewFilter': {\n return {\n ...state,\n newFilter: action.payload,\n }\n }\n case 'removeNewFilter': {\n const allFiltersRemoved = state.filterGroups.every(\n (group) => group.filters.length === 0\n )\n return {\n ...state,\n newFilter: undefined,\n isNewFilterInputOpen: allFiltersRemoved,\n }\n }\n case 'updateFilter': {\n const { groupIndex, filterIndex, filter } = action.payload\n let filterGroups = copyFilterGroups(state.filterGroups)\n const groupField = filterGroups[groupIndex].field\n\n if (groupField === filter.field) {\n filterGroups[groupIndex].filters[filterIndex] = filter\n } else {\n filterGroups = removeFilter(groupIndex, filterIndex, filterGroups)\n filterGroups = addFilter(filter, filterGroups)\n }\n\n return {\n ...state,\n filterGroups,\n }\n }\n case 'changeFilter': {\n const { groupIndex, filterIndex, filter } = action.payload\n const filterGroups = copyFilterGroups(state.filterGroups)\n const group = filterGroups[groupIndex]\n if (group) {\n group.filters[filterIndex] = filter\n }\n\n return {\n ...state,\n filterGroups,\n }\n }\n case 'removeFilter': {\n const { groupIndex, filterIndex } = action.payload\n\n const filterGroups = removeFilter(\n groupIndex,\n filterIndex,\n state.filterGroups\n )\n\n return {\n ...state,\n filterGroups,\n isNewFilterInputOpen:\n state.isNewFilterInputOpen || filterGroups.length === 0,\n }\n }\n case 'clearAllFilters': {\n return {\n ...state,\n filterGroups: [],\n isNewFilterInputOpen: true,\n }\n }\n default:\n return state\n }\n}\n\nexport const useFiltersForm = ({\n initialValues,\n}: UseFiltersFormInput): UseFiltersFormOutput => {\n const [{ filterGroups, newFilter, isNewFilterInputOpen }, dispatch] =\n useReducer(\n filterFormReducer,\n {\n filterGroups: [],\n newFilter: undefined,\n isNewFilterInputOpen: true,\n },\n (state) => {\n return filterFormReducer(state, {\n type: 'initialize',\n payload: initialValues,\n })\n }\n )\n\n const isValid =\n (filterGroups.length === 0 ||\n filterGroups.every((group) =>\n group.filters.every(\n (filter) => filter.errors && filter.errors.length === 0\n )\n )) &&\n (newFilter?.errors ? newFilter.errors.length === 0 : true)\n\n const isEmpty =\n filterGroups.length === 0 &&\n (newFilter ? isEmptyFormFilter(newFilter) : true)\n\n return {\n dispatch,\n filterGroups,\n newFilter,\n isNewFilterInputOpen,\n isValid,\n isEmpty,\n }\n}\n","import { Button } from '../button'\nimport { TrashIcon } from '@phosphor-icons/react'\nimport { FilterInput } from './FilterInput'\nimport cx from 'classnames'\nimport s from './FiltersForm.module.css'\nimport { FilterConfig } from '.'\nimport { FormFilter } from './types'\n\ntype FilterGroupProps = {\n filterGroup: {\n field: string\n filters: FormFilter[]\n }\n groupIndex: number\n filterConfigs: FilterConfig[]\n className?: string\n onRemove: (index: number) => void\n onChange: (filter: FormFilter, index: number) => void\n onDone: (filter: FormFilter, index: number) => void\n}\n\nexport const FilterGroup = ({\n filterGroup,\n groupIndex,\n filterConfigs,\n className,\n onRemove,\n onChange,\n onDone,\n}: FilterGroupProps) => {\n return (\n <div\n key={filterGroup.field}\n className={cx(\n 'flex flex-col gap-4',\n {\n [s.filterFormGroupContainer]: filterGroup.filters.length > 1,\n 'p-3': filterGroup.filters.length > 1,\n 'pr-3': filterGroup.filters.length === 1,\n },\n className\n )}\n >\n {filterGroup.filters.map((filter, filterIndex) => (\n <div\n key={`${groupIndex}:${filterIndex}-input-container`}\n className=\"flex items-center justify-between\"\n >\n {filterIndex >= 1 && (\n <span className={cx(s.filterFormConjunction, 'mr-3')}>and</span>\n )}\n <FilterInput\n key={`${groupIndex}:${filterIndex}`}\n value={filter}\n filterConfigs={filterConfigs}\n className=\"flex-1\"\n onChange={(filter) => onChange(filter, filterIndex)}\n onBlur={(filter) => onDone(filter, filterIndex)}\n />\n <Button\n type=\"text\"\n icon={<TrashIcon />}\n onClick={() => onRemove(filterIndex)}\n />\n </div>\n ))}\n </div>\n )\n}\n","import { Button } from '../button'\nimport { PlusCircleIcon, TrashIcon } from '@phosphor-icons/react'\nimport s from './FiltersForm.module.css'\nimport cx from 'classnames'\nimport { FilterForm, FilterConfig } from '.'\nimport { isEmptyFilter, isFilter } from './filterHelpers'\nimport { useMemo } from 'react'\nimport { FilterInput } from './FilterInput'\nimport { useFiltersForm } from './useFiltersForm'\nimport { FilterGroup } from './FilterGroup'\n\ntype Props = {\n filterConfigs: FilterConfig[]\n title?: string\n onSubmit: (values: FilterForm) => void\n initialValues?: FilterForm\n maxFiltersPerField?: number\n}\n\nexport const FiltersForm = ({\n title,\n filterConfigs,\n onSubmit,\n initialValues,\n maxFiltersPerField = 5,\n}: Props) => {\n const { dispatch, filterGroups, isNewFilterInputOpen, isValid, isEmpty } =\n useFiltersForm({\n initialValues,\n })\n\n const handleSubmit = () => {\n onSubmit({\n filters: filterGroups\n .flatMap((group) => group.filters)\n .filter((filter) => isFilter(filter))\n .filter((filter) => !isEmptyFilter(filter)),\n })\n }\n\n const availableFilterConfigs = useMemo(() => {\n const filterFieldCounts = filterGroups.reduce(\n (acc, filterGroup) => {\n acc[filterGroup.field] = filterGroup.filters.length\n return acc\n },\n {} as Record<string, number>\n )\n\n return filterConfigs.map((config) => ({\n ...config,\n disabled: (filterFieldCounts[config.field] || 0) >= maxFiltersPerField,\n }))\n }, [\n filterConfigs,\n filterGroups.map((g) => `${g.field}-${g.filters.length}`).join(','),\n maxFiltersPerField,\n ])\n\n return (\n <div className={cx(s.j2FilterForm)}>\n <div\n className={cx(\n s.filterFormFieldsContainer,\n 'flex flex-col gap-4',\n 'p-4 mb-6'\n )}\n >\n {title && <span className={s.filterFormTitle}>{title}</span>}\n {filterGroups.map((filterGroup, groupIndex) => (\n <div\n key={`filter-group-${filterGroup.field}-${filterGroup.filters.length}`}\n className={cx('flex gap-3', {\n 'items-center': filterGroup.filters.length === 1,\n })}\n >\n {groupIndex > 0 ? (\n <span\n className={cx(s.filterFormConjunction, {\n 'pt-4': filterGroup.filters.length > 1,\n })}\n >\n and\n </span>\n ) : null}\n <FilterGroup\n filterGroup={filterGroup}\n groupIndex={groupIndex}\n filterConfigs={availableFilterConfigs}\n className=\"grow\"\n onChange={(filter, filterIndex) => {\n dispatch({\n type: 'changeFilter',\n payload: { groupIndex, filterIndex, filter },\n })\n }}\n onDone={(filter, filterIndex) => {\n dispatch({\n type: 'updateFilter',\n payload: { groupIndex, filterIndex, filter },\n })\n }}\n onRemove={(filterIndex) => {\n dispatch({\n type: 'removeFilter',\n payload: { groupIndex, filterIndex },\n })\n }}\n />\n </div>\n ))}\n {isNewFilterInputOpen && (\n <div className={cx('flex gap-3 items-center')}>\n {filterGroups.length > 0 ? (\n <span className={cx(s.filterFormConjunction)}>and</span>\n ) : null}\n <div className={cx('flex items-center justify-between', 'grow')}>\n <FilterInput\n key={JSON.stringify(filterGroups)}\n filterConfigs={availableFilterConfigs}\n className=\"flex-1\"\n onChange={(filter) => {\n dispatch({ type: 'changeNewFilter', payload: filter })\n }}\n onBlur={(filter) => {\n dispatch({ type: 'addNewFilter', payload: filter })\n }}\n />\n <div className=\"mr-3\">\n {filterGroups.length > 0 ? (\n <Button\n type=\"text\"\n icon={<TrashIcon />}\n onClick={() => dispatch({ type: 'removeNewFilter' })}\n />\n ) : (\n <div className=\"w-8\" />\n )}\n </div>\n </div>\n </div>\n )}\n <div className=\"flex items-center\">\n <Button\n icon={<PlusCircleIcon />}\n onClick={() => dispatch({ type: 'openNewFilterInput' })}\n disabled={!isValid}\n >\n Add Rule\n </Button>\n <Button\n type=\"text\"\n onClick={() => {\n dispatch({\n type: 'clearAllFilters',\n })\n }}\n >\n Clear All Rules\n </Button>\n </div>\n </div>\n <div className=\"flex justify-end\">\n <Button\n onClick={handleSubmit}\n type=\"primary\"\n disabled={isEmpty ? false : !isValid}\n >\n Apply Filters\n </Button>\n </div>\n </div>\n )\n}\n","import { FormProps } from 'antd'\nimport { Form as AntdForm, FormItem } from 'formik-antd'\nimport './Form.css'\n\ntype Props = Expand<FormProps>\n\nexport const Form = ({ children, ...props }: Props) => {\n return <AntdForm {...props}>{children}</AntdForm>\n}\n\nForm.Item = FormItem\n","import { Input as FormikAntdInput, InputProps } from 'formik-antd'\ntype Props = Expand<InputProps>\n\nexport const Input = ({ size = 'large', ...props }: Props) => {\n return <FormikAntdInput size={size} {...props} />\n}\n","import { forwardRef } from 'react'\nimport { Input as RawAntDInput } from 'antd'\nimport type { InputProps as AntDInputProps, InputRef } from 'antd'\n\ntype AntdInputProps = Expand<AntDInputProps>\n\nexport type { InputRef }\n\nexport const AntdInput = forwardRef<InputRef, AntdInputProps>(\n ({ size = 'large', ...props }, ref) => {\n return <RawAntDInput ref={ref} size={size} {...props} />\n }\n)\n\nAntdInput.displayName = 'AntdInput'\n","import { forwardRef } from 'react'\nimport { Input as RawAntDInput } from 'antd'\nimport type { InputRef } from 'antd'\nimport type { SearchProps as AntDSearchProps } from 'antd/es/input/Search'\n\ntype AntdSearchInputProps = Expand<AntDSearchProps>\n\nexport const AntdSearchInput = forwardRef<InputRef, AntdSearchInputProps>(\n ({ size = 'large', ...props }, ref) => {\n return <RawAntDInput.Search ref={ref} size={size} {...props} />\n }\n)\n\nAntdSearchInput.displayName = 'AntdSearchInput'\n","import { InputNumber as FormikInputNumber, InputNumberProps } from 'formik-antd'\nimport cx from 'classnames'\nimport styles from './InputNumber.module.css'\nimport { CaretDownIcon, CaretUpIcon } from '@phosphor-icons/react'\ntype Props = Expand<InputNumberProps> & {\n name: string\n max?: number\n min?: number\n step?: number\n}\n\nexport const InputNumber = ({\n size = 'large',\n step = 1,\n name,\n max,\n min,\n ...props\n}: Props) => {\n return (\n <FormikInputNumber\n name={name}\n max={max}\n min={min}\n step={step}\n className={cx(styles.j2InputNumber, props.className)}\n upHandler={<CaretUpIcon weight=\"bold\" size={12} />}\n downHandler={<CaretDownIcon weight=\"bold\" size={12} />}\n size={size}\n {...props}\n />\n )\n}\n","import { Popover as AntdPopover, PopoverProps as AntdPopoverProps } from 'antd'\nimport cx from 'classnames'\nimport styles from './Popover.module.css'\n\ntype _Props = AntdPopoverProps & {\n contentPadding?: boolean\n scrollable?: boolean\n /* @deprecated use paddingSize instead */\n smallPadding?: boolean\n /* default padding is large */\n paddingSize?: 'xxs' | 'xs' | 'sm' | 'md' | 'xl'\n}\n\nexport type PopoverProps = Expand<_Props>\n\nconst Popover = ({\n children,\n placement = 'top',\n scrollable = false,\n contentPadding = true,\n content,\n smallPadding = false,\n paddingSize,\n arrow = false,\n ...props\n}: PopoverProps) => {\n return (\n <AntdPopover\n overlayClassName={cx(\n styles.j2Popover,\n scrollable && styles.scrollable,\n smallPadding && styles.smallPadding,\n paddingSize && styles[`${paddingSize}Padding`]\n )}\n {...props}\n placement={placement}\n arrow={arrow}\n content={() => {\n if (!contentPadding) {\n return <div>{typeof content == 'function' ? content() : content}</div>\n }\n\n return typeof content == 'function' ? content() : content\n }}\n >\n <div>{children}</div>\n </AntdPopover>\n )\n}\n\nexport { Popover }\n","import { Tooltip as AntdTooltip, TooltipProps } from 'antd'\n\nexport type Props = Expand<TooltipProps>\n\nconst Tooltip = ({\n children,\n placement = 'top',\n arrow = false,\n ...props\n}: Props) => {\n return (\n <AntdTooltip {...props} placement={placement} arrow={arrow}>\n <div>{children}</div>\n </AntdTooltip>\n )\n}\n\nexport { Tooltip }\n","import type { ReactNode } from 'react'\nimport cx from 'classnames'\nimport { Popover } from '../popover/Popover'\nimport { Button } from '../button/Button'\nimport { CopyIcon } from '@phosphor-icons/react'\nimport { Tooltip } from '../tooltip'\nimport { OpenMessageFunc } from '../message/useMessage'\nimport s from './ListPopover.module.css'\n\nexport type PopoverObjectItem = { categoryName: string; items: string[] }\nexport type PopoverItem = string | PopoverObjectItem\n\ntype _ContentProps = {\n items: PopoverItem[]\n openMessage: OpenMessageFunc\n renderItem?: (label: string) => ReactNode\n}\n\ntype PopoverContentProps = Expand<_ContentProps>\n\nconst CopyButton = ({\n openMessage,\n textToCopy,\n}: {\n openMessage: OpenMessageFunc\n textToCopy: string\n}) => (\n <Tooltip title=\"Copy to Clipboard\" className=\"ml-2\" arrow={false}>\n <Button\n type=\"text\"\n icon={\n <CopyIcon\n onClick={() => {\n navigator.clipboard.writeText(textToCopy)\n openMessage('success', 'Copied to Clipboard')\n }}\n />\n }\n ></Button>\n </Tooltip>\n)\n\nconst StringListItem = ({\n item,\n openMessage,\n renderItem,\n}: {\n item: string\n openMessage: OpenMessageFunc\n renderItem?: (label: string) => ReactNode\n}) => {\n return (\n <div key={item} className={cx('flex items-center')}>\n <div className={cx('overflow-hidden text-nowrap text-ellipsis')}>\n {renderItem ? renderItem(item) : item}\n </div>\n <CopyButton openMessage={openMessage} textToCopy={item} />\n </div>\n )\n}\n\nconst ObjectListItem = ({\n item,\n openMessage,\n index,\n renderItem,\n}: {\n item: PopoverObjectItem\n openMessage: OpenMessageFunc\n index: number\n renderItem?: (label: string) => ReactNode\n}) => {\n return (\n <div className={cx({ 'mt-2': index != 0 })}>\n <p\n className={cx(\n 'overflow-hidden text-nowrap text-ellipsis',\n s.categoryName\n )}\n title={item.categoryName}\n >\n {item.categoryName}\n </p>\n {item.items.map((subItem, index) => (\n <div key={`${subItem}:${index}`} className={cx('flex items-center')}>\n <div className={cx('overflow-hidden text-nowrap text-ellipsis')}>\n {renderItem ? renderItem(subItem) : subItem}\n </div>\n <CopyButton openMessage={openMessage} textToCopy={subItem} />\n </div>\n ))}\n </div>\n )\n}\n\nconst PopoverContent = ({\n items,\n openMessage,\n renderItem,\n}: PopoverContentProps) => {\n return (\n <div className={cx('max-w-[400px] max-h-[198px]')}>\n {items.map((item, i) =>\n typeof item === 'string' ? (\n <StringListItem\n key={item}\n item={item}\n openMessage={openMessage}\n renderItem={renderItem}\n />\n ) : (\n <ObjectListItem\n index={i}\n key={item.categoryName}\n item={item}\n openMessage={openMessage}\n renderItem={renderItem}\n />\n )\n )}\n </div>\n )\n}\n\ntype Props = {\n items: PopoverItem[]\n column: string\n openMessage: OpenMessageFunc\n children: React.ReactNode\n renderItem?: (label: string) => ReactNode\n}\n\nexport type ListPopoverProps = Expand<Props>\n\nconst ListPopover = ({\n children,\n items,\n column,\n openMessage,\n renderItem,\n}: ListPopoverProps) => {\n return (\n <Popover\n title={`${column} (${items.length})`}\n content={\n <PopoverContent\n items={items}\n openMessage={openMessage}\n renderItem={renderItem}\n />\n }\n trigger=\"click\"\n scrollable={true}\n arrow={false}\n contentPadding={false}\n >\n <div className=\"w-full overflow-hidden\">\n <Button\n className={cx(\n 'p-0 h-auto w-full overflow-hidden text-left justify-start'\n )}\n type={items.length > 0 ? 'link' : 'text'}\n >\n {children}\n </Button>\n </div>\n </Popover>\n )\n}\n\nexport { ListPopover }\n","import { Menu as AntdMenu, MenuProps as AntdMenuProps } from 'antd'\nimport styles from './Menu.module.css'\nimport cx from 'classnames'\n\ntype Props = Expand<AntdMenuProps> & {\n compact?: boolean\n}\n\nconst Menu = ({ compact = false, ...props }: Props) => {\n return (\n <AntdMenu\n className={cx(styles.j2Menu, compact && styles.compact)}\n {...props}\n inlineCollapsed={compact}\n />\n )\n}\n\nexport { Menu }\nexport type { Props as MenuProps }\n","import { message } from 'antd'\nimport styles from './Message.module.css'\nimport cx from 'classnames'\nimport {\n CheckCircleIcon,\n WarningCircleIcon,\n XCircleIcon,\n} from '@phosphor-icons/react'\n\ntype NotificationType = 'success' | 'warning' | 'error'\n\nexport type OpenMessageFunc = (\n type: Expand<NotificationType>,\n messageContent: string\n) => void\n\nconst getIcon = (type: NotificationType) => {\n switch (type) {\n case 'success':\n return (\n <CheckCircleIcon\n weight=\"fill\"\n color=\"var(--j2-color-success)\"\n size={16}\n className={cx(styles.messageIcon)}\n />\n )\n case 'warning':\n return (\n <WarningCircleIcon\n weight=\"fill\"\n color=\"var(--j2-color-warning)\"\n size={16}\n className={cx(styles.messageIcon)}\n />\n )\n case 'error':\n return (\n <XCircleIcon\n weight=\"fill\"\n color=\"var(--j2-color-error)\"\n size={16}\n className={cx(styles.messageIcon)}\n />\n )\n }\n}\n\nexport const useMessage = () => {\n const [messageApi, contextHolder] = message.useMessage()\n\n const openMessage: OpenMessageFunc = (\n type: Expand<NotificationType>,\n messageContent: string\n ) => {\n messageApi.open({\n type: type,\n icon: getIcon(type),\n content: messageContent,\n className: cx({ styles }),\n })\n }\n\n return { openMessage, contextHolder }\n}\n","import { Modal as AntdModal, ModalProps } from 'antd'\nimport { XIcon } from '@phosphor-icons/react'\nimport './Modal.css'\nimport cx from 'classnames'\n\nexport type Props = {\n withContentPadding?: boolean\n} & Expand<ModalProps>\n\nconst Modal = ({\n open,\n title,\n children,\n onCancel,\n withContentPadding: withPadding = true,\n ...props\n}: Props) => {\n return (\n <AntdModal\n title={title}\n className={cx('j2-modal')}\n maskClosable={true}\n centered\n closeIcon={<XIcon size={22} weight=\"regular\" />}\n onCancel={onCancel}\n open={open}\n {...props}\n >\n <div className={cx(withPadding ? 'px-6 py-3' : 'px-0 py-0')}>\n {children}\n </div>\n </AntdModal>\n )\n}\n\nexport { Modal }\n","import * as React from \"react\";\nconst SvgJ2LogoMenuCollapse = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 32, height: 32, viewBox: \"0 0 32 32\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M30.3968 25.6H27.392C26.9664 25.6 26.56 25.7696 26.2592 26.0672L26.064 26.2624C25.7632 26.5632 25.5968 26.9696 25.5968 27.3952V30.4C25.5968 31.2832 24.88 32 23.9968 32H20.7968C19.9136 32 19.1968 31.2832 19.1968 30.4V27.3952C19.1968 26.9696 19.0272 26.5632 18.7296 26.2624L18.5344 26.0672C18.2336 25.7664 17.8272 25.6 17.4016 25.6H14.3968C13.5136 25.6 12.7968 24.8832 12.7968 24V20.8C12.7968 19.9168 13.5136 19.2 14.3968 19.2H17.5968C18.48 19.2 19.1968 19.9168 19.1968 20.8V23.8048C19.1968 24.2304 19.3664 24.6368 19.664 24.9376L19.8592 25.1328C20.16 25.4336 20.5664 25.6 20.992 25.6H23.8048C24.2304 25.6 24.6368 25.4304 24.9376 25.1328L25.1328 24.9376C25.4336 24.6368 25.6 24.2304 25.6 23.8048V8.00002C25.6 7.11682 26.3168 6.40002 27.2 6.40002H30.4C31.2832 6.40002 32 7.11682 32 8.00002V24C32 24.8832 31.2832 25.6 30.4 25.6H30.3968Z\", fill: \"#253761\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M8.192 6.39999H11.0048C11.4304 6.39999 11.8368 6.56959 12.1376 6.86719L12.3328 7.06239C12.6336 7.36319 12.8 7.76959 12.8 8.19519V11.2C12.8 12.0832 13.5168 12.8 14.4 12.8H17.6C18.4832 12.8 19.2 12.0832 19.2 11.2V7.99999C19.2 7.11679 18.4832 6.39999 17.6 6.39999H14.5952C14.1696 6.39999 13.7632 6.23039 13.4624 5.93279L13.2672 5.73759C12.9664 5.43679 12.8 5.03039 12.8 4.60479V1.6C12.8 0.716799 12.0832 0 11.2 0H8C7.1168 0 6.4 0.716799 6.4 1.6V4.60479C6.4 5.03039 6.2304 5.43679 5.9328 5.73759L5.7376 5.93279C5.4368 6.23359 5.0304 6.39999 4.6048 6.39999H1.6C0.7168 6.39999 0 7.11679 0 7.99999V24C0 24.8832 0.7168 25.6 1.6 25.6H4.8C5.6832 25.6 6.4 24.8832 6.4 24V8.19519C6.4 7.76959 6.5696 7.36319 6.8672 7.06239L7.0624 6.86719C7.3632 6.56639 7.7696 6.39999 8.1952 6.39999H8.192Z\", fill: \"#253761\" }));\nexport default SvgJ2LogoMenuCollapse;\n","import * as React from \"react\";\nconst SvgJ2LogoMenu = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 152, height: 32, viewBox: \"0 0 152 32\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M44.9576 22.7691C46.6563 22.7691 47.6449 21.8637 47.6449 19.5891V6.39841H50.8536V20.4113C50.8536 23.8121 48.7966 25.8149 45.8629 25.8149C45.4502 25.8149 44.8488 25.8149 44.3561 25.7061V22.7723H44.9608L44.9576 22.7691Z\", fill: \"#383842\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M53.3582 23.2619L60.0476 16.6522C62.0215 14.7038 62.9812 13.5809 62.9812 12.074C62.9812 10.4296 61.6376 9.24902 59.8557 9.24902C57.6898 9.24902 56.3462 10.7303 56.4294 13.0882H53.195C53.0575 8.8939 55.9367 6.12332 59.9132 6.12332C63.5891 6.12332 66.2763 8.56438 66.2763 11.9908C66.2763 14.3775 64.7152 16.4346 62.3286 18.6805L58.544 22.4653H66.4139V25.591H53.3614V23.2587L53.3582 23.2619Z\", fill: \"#383842\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M89.7255 6.39844V25.5941H86.5168V17.1768H77.2201V25.5941H74.0114V6.39844H77.2201V14.1055H86.5168V6.39844H89.7255Z\", fill: \"#383842\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M91.5684 18.847C91.5684 14.9247 94.614 11.9078 98.4786 11.9078C102.097 11.9078 105.005 14.7327 105.005 18.4631C105.005 18.7382 104.976 19.3141 104.95 19.6149H94.4476C94.7228 21.8096 96.284 23.262 98.5074 23.262C100.235 23.262 101.55 22.4398 101.825 21.1793H104.842C104.375 24.0299 101.796 25.8695 98.5362 25.8695C94.614 25.8695 91.5716 22.8237 91.5716 18.8502L91.5684 18.847ZM101.77 17.3945C101.607 15.7213 100.181 14.4864 98.3442 14.4864C96.5079 14.4864 95.1099 15.5294 94.614 17.3945H101.77Z\", fill: \"#383842\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M120.773 25.5944H117.702V23.1821C116.743 24.8809 115.098 25.8695 112.932 25.8695C109.34 25.8695 106.515 22.7438 106.515 18.8759C106.515 15.0079 109.34 11.911 112.932 11.911C115.098 11.911 116.743 12.8996 117.702 14.5984V12.1862H120.773V25.5944ZM113.591 22.9614C115.924 22.9614 117.677 21.2082 117.677 18.8759C117.677 16.5436 115.92 14.816 113.591 14.816C111.262 14.816 109.532 16.6268 109.532 18.8759C109.532 21.125 111.314 22.9614 113.591 22.9614Z\", fill: \"#383842\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M126.708 25.5942H123.666V6.39847H126.708V25.5942Z\", fill: \"#383842\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M130.688 20.549V15.091H128.138V12.1828H130.688V8.59003H133.759V12.1828H137.268V15.091H133.759V20.4946C133.759 22.1934 134.802 22.8812 136.283 22.8812C136.612 22.8812 136.968 22.8524 137.271 22.7725V25.5974C136.804 25.7062 136.12 25.7606 135.627 25.7606C132.665 25.7606 130.691 23.9498 130.691 20.549H130.688Z\", fill: \"#383842\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M142.403 6.39847V14.2975C143.254 12.7906 144.652 11.9108 146.434 11.9108C149.889 11.9108 152 14.2143 152 17.9447V25.5942H148.954V18.3286C148.954 16.2171 147.665 14.8446 145.691 14.8446C143.717 14.8446 142.399 16.2171 142.399 18.3286V25.5942H139.357V6.39847H142.399H142.403Z\", fill: \"#383842\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M30.3971 25.6H27.3926C26.967 25.6 26.5607 25.7696 26.2599 26.0672L26.0647 26.2624C25.7639 26.5632 25.5976 26.9696 25.5976 27.3952V30.4C25.5976 31.2832 24.8808 32 23.9977 32H20.798C19.9149 32 19.1982 31.2832 19.1982 30.4V27.3952C19.1982 26.9696 19.0286 26.5632 18.731 26.2624L18.5359 26.0672C18.2351 25.7664 17.8287 25.6 17.4032 25.6H14.3987C13.5156 25.6 12.7988 24.8832 12.7988 24V20.8C12.7988 19.9168 13.5156 19.2 14.3987 19.2H17.5984C18.4815 19.2 19.1982 19.9168 19.1982 20.8V23.8048C19.1982 24.2304 19.3678 24.6368 19.6654 24.9376L19.8605 25.1328C20.1613 25.4336 20.5677 25.6 20.9932 25.6H23.8057C24.2313 25.6 24.6377 25.4304 24.9384 25.1328L25.1336 24.9376C25.4344 24.6368 25.6008 24.2304 25.6008 23.8048V8C25.6008 7.1168 26.3175 6.4 27.2006 6.4H30.4003C31.2834 6.4 32.0001 7.1168 32.0001 8V24C32.0001 24.8832 31.2834 25.6 30.4003 25.6H30.3971ZM8.1945 6.4H11.007C11.4326 6.4 11.8389 6.5696 12.1397 6.8672L12.3349 7.0624C12.6357 7.3632 12.802 7.7696 12.802 8.1952V11.2C12.802 12.0832 13.5188 12.8 14.4019 12.8H17.6016C18.4847 12.8 19.2014 12.0832 19.2014 11.2V8C19.2014 7.1168 18.4847 6.4 17.6016 6.4H14.5971C14.1715 6.4 13.7651 6.2304 13.4644 5.9328L13.2692 5.7376C12.9684 5.4368 12.802 5.0304 12.802 4.6048V1.6C12.802 0.7168 12.0853 0 11.2022 0H8.00252C7.11941 0 6.40268 0.7168 6.40268 1.6V4.6048C6.40268 5.0304 6.2331 5.4368 5.93553 5.7376L5.74035 5.9328C5.43958 6.2336 5.03322 6.4 4.60766 6.4H1.59996C0.71685 6.4 0.00012207 7.1168 0.00012207 8V24C0.00012207 24.8832 0.71685 25.6 1.59996 25.6H4.79964C5.68275 25.6 6.39948 24.8832 6.39948 24V8.1952C6.39948 7.7696 6.56906 7.3632 6.86663 7.0624L7.06182 6.8672C7.36259 6.5664 7.76894 6.4 8.1945 6.4Z\", fill: \"#253761\" }));\nexport default SvgJ2LogoMenu;\n","import * as React from \"react\";\nconst SvgMenuSidebarExpand = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { opacity: 0.2, d: \"M3.75049 19.5C3.55158 19.5 3.36081 19.421 3.22016 19.2803C3.07951 19.1397 3.00049 18.9489 3.00049 18.75V5.25C3.00049 5.05109 3.07951 4.86032 3.22016 4.71967C3.36081 4.57902 3.55158 4.5 3.75049 4.5H8.25049V19.5H3.75049Z\", fill: \"#364975\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M8.25049 4.5V19.5\", stroke: \"#364975\", strokeWidth: 1.5, strokeLinecap: \"round\", strokeLinejoin: \"round\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M20.2505 4.5H3.75049C3.33627 4.5 3.00049 4.83579 3.00049 5.25V18.75C3.00049 19.1642 3.33627 19.5 3.75049 19.5H20.2505C20.6647 19.5 21.0005 19.1642 21.0005 18.75V5.25C21.0005 4.83579 20.6647 4.5 20.2505 4.5Z\", stroke: \"#364975\", strokeWidth: 1.5, strokeLinecap: \"round\", strokeLinejoin: \"round\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M3.00049 7.5H5.25049\", stroke: \"#364975\", strokeWidth: 1.5, strokeLinecap: \"round\", strokeLinejoin: \"round\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M3.00049 10.5H5.25049\", stroke: \"#364975\", strokeWidth: 1.5, strokeLinecap: \"round\", strokeLinejoin: \"round\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M3.00049 13.5H5.25049\", stroke: \"#364975\", strokeWidth: 1.5, strokeLinecap: \"round\", strokeLinejoin: \"round\" }), /* @__PURE__ */ React.createElement(\"path\", { opacity: 0.2, d: \"M15.0002 14.7002L17.7002 12.0002L15.0002 9.3002V14.7002Z\", fill: \"#364975\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M11.1 12.0002H15\", stroke: \"#364975\", strokeWidth: 0.6, strokeLinecap: \"round\", strokeLinejoin: \"round\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M15.0002 14.7002L17.7002 12.0002L15.0002 9.3002V14.7002Z\", stroke: \"#364975\", strokeWidth: 0.6, strokeLinecap: \"round\", strokeLinejoin: \"round\" }));\nexport default SvgMenuSidebarExpand;\n","import * as React from \"react\";\nconst SvgMenuSidebarCollapse = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { opacity: 0.2, d: \"M3.75049 19.5C3.55158 19.5 3.36081 19.421 3.22016 19.2803C3.07951 19.1397 3.00049 18.9489 3.00049 18.75V5.25C3.00049 5.05109 3.07951 4.86032 3.22016 4.71967C3.36081 4.57902 3.55158 4.5 3.75049 4.5H8.25049V19.5H3.75049Z\", fill: \"#253761\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M8.25049 4.5V19.5\", stroke: \"#253761\", strokeWidth: 1.5, strokeLinecap: \"round\", strokeLinejoin: \"round\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M20.2505 4.5H3.75049C3.33627 4.5 3.00049 4.83579 3.00049 5.25V18.75C3.00049 19.1642 3.33627 19.5 3.75049 19.5H20.2505C20.6647 19.5 21.0005 19.1642 21.0005 18.75V5.25C21.0005 4.83579 20.6647 4.5 20.2505 4.5Z\", stroke: \"#253761\", strokeWidth: 1.5, strokeLinecap: \"round\", strokeLinejoin: \"round\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M3.00049 7.5H5.25049\", stroke: \"#253761\", strokeWidth: 1.5, strokeLinecap: \"round\", strokeLinejoin: \"round\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M3.00049 10.5H5.25049\", stroke: \"#253761\", strokeWidth: 1.5, strokeLinecap: \"round\", strokeLinejoin: \"round\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M3.00049 13.5H5.25049\", stroke: \"#253761\", strokeWidth: 1.5, strokeLinecap: \"round\", strokeLinejoin: \"round\" }), /* @__PURE__ */ React.createElement(\"path\", { opacity: 0.2, d: \"M13.8001 9.30029L11.1001 12.0003L13.8001 14.7003V9.30029Z\", fill: \"#253761\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M17.7005 12.0002H13.8005\", stroke: \"#253761\", strokeWidth: 0.6, strokeLinecap: \"round\", strokeLinejoin: \"round\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M13.8001 9.30029L11.1001 12.0003L13.8001 14.7003V9.30029Z\", stroke: \"#253761\", strokeWidth: 0.6, strokeLinecap: \"round\", strokeLinejoin: \"round\" }));\nexport default SvgMenuSidebarCollapse;\n","import * as React from 'react'\nimport { ItemType } from 'antd/es/menu/interface'\nimport cx from 'classnames'\nimport { Menu } from '../menu'\n\nimport SmallLogo from '../../svgs/j2-logo-menu-collapse.svg?react'\nimport LogoWithText from '../../svgs/j2-logo-menu.svg?react'\nimport ExpandIcon from '../../svgs/menu-sidebar-expand.svg?react'\nimport CollapseIcon from '../../svgs/menu-sidebar-collapse.svg?react'\nimport { Button } from '../button'\n\nimport styles from './NavMenu.module.css'\nimport { Tooltip } from '../tooltip'\n\ntype Props = {\n href?: string\n items: ItemType[]\n headerSlot?: React.ReactNode\n defaultOpenKeys?: string[]\n defaultSelectedKeys?: string[]\n footerItems: ItemType[]\n className?: string\n onCollapse?: (isCollapsed: boolean) => void\n}\n\nexport const NavMenu = ({\n href = '/',\n items,\n headerSlot,\n defaultOpenKeys,\n defaultSelectedKeys,\n footerItems,\n className,\n onCollapse,\n}: Props) => {\n const [isCollapsed, setIsCollapsed] = React.useState(false)\n const [isToggleTooltipOpen, setToggleTooltipOpen] = React.useState(false)\n\n const toggleCollapse = React.useCallback(() => {\n setIsCollapsed(!isCollapsed)\n setToggleTooltipOpen(false)\n onCollapse?.(!isCollapsed)\n }, [isCollapsed])\n\n return (\n <div\n className={cx(\n styles.navMenuContainer,\n isCollapsed && styles.collapsed,\n 'bg-white',\n className\n )}\n >\n <div className={cx('flex', 'flex-col', 'h-full')}>\n <div className=\"py-5 px-3\">\n <div\n className={cx(\n 'flex',\n 'items-center',\n isCollapsed ? 'justify-center' : 'justify-between',\n styles.headerContainer,\n 'min-h-9'\n )}\n >\n <a\n href={href}\n className={cx('flex', 'items-center', 'gap-2', styles.logo)}\n >\n {isCollapsed ? <SmallLogo /> : <LogoWithText />}\n </a>\n <Tooltip\n title={isCollapsed ? 'Expand Menu' : 'Collapse Menu'}\n placement=\"right\"\n arrow={false}\n onOpenChange={(shouldBeOpen) => {\n setToggleTooltipOpen(shouldBeOpen)\n }}\n open={isToggleTooltipOpen}\n >\n <Button\n type=\"text\"\n icon={isCollapsed ? <ExpandIcon /> : <CollapseIcon />}\n onClick={toggleCollapse}\n className={cx('toggle-button')}\n />\n </Tooltip>\n </div>\n {headerSlot && <div className={cx('mt-5')}>{headerSlot}</div>}\n </div>\n <div className={cx('flex', 'flex-col', 'justify-between', 'flex-1')}>\n <Menu\n key={`nav-menu-main-${isCollapsed}`}\n mode={'inline'}\n compact={isCollapsed}\n items={items}\n defaultOpenKeys={isCollapsed ? undefined : defaultOpenKeys}\n defaultSelectedKeys={defaultSelectedKeys}\n />\n <Menu\n key={`nav-menu-footer-${isCollapsed}`}\n mode={'inline'}\n compact={isCollapsed}\n selectable={false}\n items={footerItems}\n />\n </div>\n </div>\n </div>\n )\n}\n","import { notification } from 'antd'\nimport type { NotificationArgsProps } from 'antd'\nimport s from './Notification.module.css'\nimport {\n CheckCircleIcon,\n InfoIcon,\n WarningCircleIcon,\n XIcon,\n XCircleIcon,\n} from '@phosphor-icons/react'\nimport cx from 'classnames'\nimport React from 'react'\n\ntype NotificationType = 'success' | 'info' | 'warning' | 'error'\n\nexport type OpenNotificationFunc = (\n type: Expand<NotificationType>,\n config: Expand<NotificationArgsProps>\n) => void\n\nconst getIcon = (type: NotificationType) => {\n switch (type) {\n case 'error':\n return (\n <XCircleIcon color=\"var(--j2-color-error)\" weight=\"duotone\" size={24} />\n )\n case 'success':\n return (\n <CheckCircleIcon\n color=\"var(--j2-color-success)\"\n weight=\"duotone\"\n size={24}\n />\n )\n case 'info':\n return (\n <InfoIcon color=\"var(--j2-color-info)\" weight=\"duotone\" size={24} />\n )\n case 'warning':\n return (\n <WarningCircleIcon\n color=\"var(--j2-color-warning)\"\n weight=\"duotone\"\n size={24}\n />\n )\n }\n}\n\nexport const useNotification = () => {\n const [api, contextHolder] = notification.useNotification()\n\n const openNotification: OpenNotificationFunc = (\n type: Expand<NotificationType>,\n config: Expand<NotificationArgsProps>\n ) => {\n api[type]({\n icon: getIcon(type),\n ...config,\n closeIcon: (\n <XIcon color=\"var(--j2-color-icon)\" size={22} weight=\"regular\" />\n ),\n className: cx({\n [s.messageOnly]: config.message && !config.description,\n }),\n })\n }\n\n const closeNotification = (key?: React.Key) => {\n api.destroy(key)\n }\n\n return { openNotification, closeNotification, contextHolder }\n}\n","import { ModalProps } from 'antd'\nimport {\n CheckCircleIcon,\n InfoIcon,\n WarningCircleIcon,\n XCircleIcon,\n} from '@phosphor-icons/react'\nimport { useMemo, ReactNode } from 'react'\nimport { Modal } from '../modal'\nimport styles from './NotifcationModal.module.css'\n\ntype NotificationType = 'success' | 'info' | 'warning' | 'error'\n\nexport type NotificationModalProps = {\n type: NotificationType\n withContentPadding?: boolean\n} & Omit<ModalProps, 'title'> & {\n title?: ReactNode\n }\n\nconst getNotificationIcon = (type: NotificationType) => {\n switch (type) {\n case 'error':\n return (\n <XCircleIcon color=\"var(--j2-color-error)\" weight=\"fill\" size={24} />\n )\n case 'success':\n return (\n <CheckCircleIcon\n color=\"var(--j2-color-success)\"\n weight=\"fill\"\n size={24}\n />\n )\n case 'info':\n return <InfoIcon color=\"var(--j2-color-info)\" weight=\"fill\" size={24} />\n case 'warning':\n return (\n <WarningCircleIcon\n color=\"var(--j2-color-warning)\"\n weight=\"fill\"\n size={24}\n />\n )\n }\n}\n\nconst NotificationModal = ({\n type,\n title,\n children,\n withContentPadding = true,\n ...props\n}: NotificationModalProps) => {\n const icon = useMemo(() => getNotificationIcon(type), [type])\n\n const titleWithIcon = (\n <div className={styles.modalTitleWithIcon}>\n <div className={styles.modalIcon}>{icon}</div>\n <div className={styles.modalTitleContent}>\n <div className={styles.modalTitleText}>{title}</div>\n </div>\n </div>\n )\n\n return (\n <Modal\n title={titleWithIcon}\n withContentPadding={withContentPadding}\n {...props}\n >\n <div className={styles.modalContentWithIcon}>{children}</div>\n </Modal>\n )\n}\n\nexport { NotificationModal }\n","import {\n Pagination as AntdPagination,\n PaginationProps,\n Select,\n SelectProps,\n Button,\n} from 'antd'\nimport cx from 'classnames'\nimport {\n CaretLeftIcon,\n CaretRightIcon,\n CaretDownIcon,\n DotsThreeIcon,\n CaretDoubleLeftIcon,\n CaretDoubleRightIcon,\n} from '@phosphor-icons/react'\n\nimport s from './Pagination.module.css'\n\ntype Overrides = {\n paginationTextLabels?: boolean\n /** Forces small-size rendering independent of the config's own `size`. */\n isSmall?: boolean\n}\n\ntype Props = Expand<PaginationProps & { paginationTextLabels?: boolean }>\n\nconst renderIconButton = (\n icon: React.ReactNode,\n isSmall: boolean,\n customClassName?: string\n) => (\n <Button\n type=\"link\"\n size={isSmall ? 'small' : 'middle'}\n className={cx(customClassName, isSmall ? '!w-6' : '!w-8')}\n >\n {icon}\n </Button>\n)\n\nconst renderJumpItem = (\n icon: React.ReactNode,\n doubleIcon: React.ReactNode,\n isSmall: boolean\n) => (\n <a className=\"ant-pagination-item-link\">\n <div className=\"ant-pagination-item-container\">\n <span className=\"ant-pagination-item-ellipsis\">\n {renderIconButton(icon, isSmall, s['jump-button'])}\n </span>\n <span className=\"ant-pagination-item-link-icon\">\n {renderIconButton(doubleIcon, isSmall, s['jump-button'])}\n </span>\n </div>\n </a>\n)\n\nconst buildItemRender =\n ({ paginationTextLabels, isSmall }: Required<Overrides>) =>\n (\n _page: number,\n type: 'page' | 'prev' | 'next' | 'jump-prev' | 'jump-next',\n element: React.ReactNode\n ) => {\n if (type === 'prev') {\n return (\n <a>\n {paginationTextLabels\n ? 'Previous'\n : renderIconButton(<CaretLeftIcon />, isSmall)}\n </a>\n )\n }\n if (type === 'next') {\n return (\n <a>\n {paginationTextLabels\n ? 'Next'\n : renderIconButton(<CaretRightIcon />, isSmall)}\n </a>\n )\n }\n if (type === 'jump-prev') {\n return renderJumpItem(<DotsThreeIcon />, <CaretDoubleLeftIcon />, isSmall)\n }\n if (type === 'jump-next') {\n return renderJumpItem(\n <DotsThreeIcon />,\n <CaretDoubleRightIcon />,\n isSmall\n )\n }\n return element\n }\n\nconst paginationSelectComponentClass = (selectProps: SelectProps) => (\n <Select {...selectProps} suffixIcon={<CaretDownIcon />} />\n)\n\nconst getPaginationLocale = (isSmall: boolean) => ({\n jump_to: `Go to\\u00A0${isSmall ? ':\\u00A0\\u00A0\\u00A0' : ''}`,\n page: isSmall ? '' : 'page',\n})\n\n/**\n * Applies design-system overrides (Phosphor icons, locale, custom select\n * chrome) to an antd Pagination config. Used by the standalone\n * {@link Pagination} component, and by `<Table>`'s `pagination` prop so\n * both share identical visuals.\n */\nexport const withDesignSystemPaginationOverrides = (\n pagination: PaginationProps,\n { paginationTextLabels = false, isSmall }: Overrides = {}\n): PaginationProps => {\n const small = isSmall ?? pagination.size === 'small'\n return {\n ...pagination,\n locale: { ...getPaginationLocale(small), ...pagination.locale },\n selectComponentClass: paginationSelectComponentClass,\n itemRender: buildItemRender({\n paginationTextLabels,\n isSmall: small,\n }),\n }\n}\n\nconst Pagination = ({ paginationTextLabels = false, ...props }: Props) => {\n const enriched = withDesignSystemPaginationOverrides(props, {\n paginationTextLabels,\n })\n return <AntdPagination {...enriched} />\n}\n\nexport { Pagination }\n","import { Progress as AntdProgress, ProgressProps } from 'antd'\n\nconst Progress = ({ ...props }: ProgressProps) => {\n return <AntdProgress {...props} />\n}\n\nexport { Progress }\n","import {\n Radio as AntdRadio,\n RadioProps as AntdRadioProps,\n RadioGroupProps as AntdRadioGroupProps,\n} from 'antd'\n\ntype RadioProps = Expand<AntdRadioProps>\n\ntype FullRadioGroupProps = AntdRadioGroupProps & {\n buttonStyle?: 'solid' | 'outline'\n optionType?: 'default' | 'button'\n}\ntype RadioGroupProps = Expand<FullRadioGroupProps>\n\nconst Radio = (props: RadioProps) => {\n return <AntdRadio {...props} />\n}\n\nconst RadioGroup = ({\n buttonStyle = 'solid',\n optionType = 'button',\n ...props\n}: RadioGroupProps) => {\n return (\n <AntdRadio.Group\n {...props}\n buttonStyle={buttonStyle}\n optionType={optionType}\n />\n )\n}\n\nexport { Radio, RadioGroup }\n","import { StarIcon } from '@phosphor-icons/react'\nimport { Rate as AntdRate, RateProps } from 'antd'\nimport './Rate.css'\n\nexport type Props = Expand<RateProps>\n\nexport const Rate = ({ count = 5, ...props }: Props) => {\n return (\n <AntdRate\n {...props}\n className=\"j2-rate\"\n count={count}\n disabled={true}\n allowHalf={true}\n allowClear={true}\n character={<StarIcon weight=\"fill\" />}\n />\n )\n}\n","import * as React from 'react'\nimport { Select as AntDSelect } from 'formik-antd'\nimport { Spin } from 'antd'\nimport { LoadingOutlined } from '@ant-design/icons'\nimport type {\n SelectProps as AntDSelectProps,\n DefaultOptionType,\n} from 'antd/es/select'\nimport {\n CaretDownIcon,\n MagnifyingGlassIcon,\n XCircleIcon,\n} from '@phosphor-icons/react'\nimport { useState } from 'react'\nimport { useField } from 'formik'\n\ntype SelectProps = Expand<AntDSelectProps> & {\n name: string\n}\n\ntype GroupOption = { label?: React.ReactNode; options: DefaultOptionType[] }\n\nconst isGroupOption = (\n opt: DefaultOptionType | GroupOption\n): opt is GroupOption =>\n 'options' in opt && Array.isArray((opt as GroupOption).options)\n\nconst flattenOptions = (\n opts: (DefaultOptionType | GroupOption)[] | undefined\n): DefaultOptionType[] => {\n if (!opts) return []\n return opts.flatMap((o) =>\n isGroupOption(o) ? flattenOptions(o.options) : [o]\n )\n}\n\nexport const Select = (props: SelectProps) => {\n const [isFocused, setIsFocused] = useState(false)\n const [isSearching, setIsSearching] = useState(false)\n const [field, , helpers] = useField(props.name)\n\n const isMultiple = props.mode === 'multiple'\n const hasOptions = (props.options?.length ?? 0) > 0\n const currentValue: unknown[] = Array.isArray(field.value) ? field.value : []\n const showSelectAllFooter =\n isMultiple &&\n !props.loading &&\n !props.disabled &&\n hasOptions &&\n !isSearching\n\n const handleSearch = (value: string) => {\n setIsSearching(value.length > 0)\n if (props.onSearch) {\n props.onSearch(value)\n }\n }\n\n const handleToggleAll = () => {\n if (props.disabled) return\n\n if (currentValue.length === 0) {\n const flat = flattenOptions(\n props.options as (DefaultOptionType | GroupOption)[] | undefined\n )\n const allOptions = flat.filter(\n (opt) => opt.value !== undefined && opt.value !== null && !opt.disabled\n )\n // antd's labelInValue mode expects values shaped as { value, label }\n // rather than raw scalars; mirror that contract so the field state\n // and downstream onChange payload match what consumers expect.\n const payload = props.labelInValue\n ? allOptions.map((opt) => ({ value: opt.value, label: opt.label }))\n : allOptions.map((opt) => opt.value as string | number)\n void helpers.setValue(payload)\n props.onChange?.(payload, allOptions)\n } else {\n void helpers.setValue([])\n props.onChange?.([], [])\n }\n }\n\n const dropdownRender = (menu: React.ReactElement): React.ReactElement => {\n if (props.loading) {\n return (\n <div className=\"flex items-center justify-between px-3 py-1\">\n <span>Loading...</span>\n <Spin indicator={<LoadingOutlined spin />} size=\"small\" />\n </div>\n )\n }\n\n if (!props.options || (props.options && props.options.length === 0)) {\n return <div className=\"px-3 py-1\">No options</div>\n }\n\n if (!showSelectAllFooter) return menu\n\n const label = currentValue.length === 0 ? 'Select all' : 'Clear all'\n\n return (\n <>\n {menu}\n <div className=\"mt-1 pt-1 border-t border-j2-border-secondary\">\n <button\n type=\"button\"\n aria-label={label}\n title={label}\n onMouseDown={(e) => e.preventDefault()}\n onClick={handleToggleAll}\n className=\"w-full text-center font-semibold text-sm py-1.5 rounded cursor-pointer text-j2-primary hover:bg-j2-primary-bg-hover bg-transparent border-0\"\n >\n {label}\n </button>\n </div>\n </>\n )\n }\n\n return (\n <AntDSelect\n suffixIcon={\n props.loading ? (\n <Spin\n indicator={<LoadingOutlined spin />}\n size=\"small\"\n data-testid=\"loading-spinner\"\n />\n ) : props.showSearch && isFocused ? (\n <MagnifyingGlassIcon size={14} data-testid=\"magnifying-glass\" />\n ) : (\n <CaretDownIcon size={14} data-testid=\"caret-down\" />\n )\n }\n {...props}\n popupRender={dropdownRender}\n removeIcon={<XCircleIcon size={12} />}\n allowClear={\n props.allowClear ? { clearIcon: <XCircleIcon size={14} /> } : false\n }\n showSearch={props.showSearch}\n onSearch={handleSearch}\n onFocus={() => {\n setIsFocused(true)\n }}\n onBlur={() => {\n setIsFocused(false)\n setIsSearching(false)\n }}\n size={props.size || 'large'}\n />\n )\n}\n","import * as React from 'react'\nimport { Select as RawAntDSelect, Spin } from 'antd'\nimport { LoadingOutlined } from '@ant-design/icons'\nimport type { SelectProps as AntDSelectProps } from 'antd'\nimport {\n CaretDownIcon,\n MagnifyingGlassIcon,\n XCircleIcon,\n} from '@phosphor-icons/react'\nimport { useState } from 'react'\n\ntype AntdSelectProps = Expand<AntDSelectProps>\n\nexport const AntdSelect = (props: AntdSelectProps) => {\n const [isFocused, setIsFocused] = useState(false)\n\n const handleSearch = (value: string) => {\n if (props.onSearch) {\n props.onSearch(value)\n }\n }\n\n const dropdownRender = React.useCallback(\n (menu: React.ReactElement): React.ReactElement => {\n if (props.loading) {\n return (\n <div className=\"flex items-center justify-between px-3 py-1\">\n <span>Loading...</span>\n <Spin indicator={<LoadingOutlined spin />} size=\"small\" />\n </div>\n )\n }\n\n if (!props.options || (props.options && props.options.length === 0)) {\n return <div className=\"px-3 py-1\">No options</div>\n }\n\n return menu\n },\n [props.loading, props.options?.length]\n )\n\n return (\n <RawAntDSelect\n suffixIcon={\n props.loading ? (\n <Spin\n indicator={<LoadingOutlined spin />}\n size=\"small\"\n data-testid=\"loading-spinner\"\n />\n ) : props.showSearch && isFocused ? (\n <MagnifyingGlassIcon size={14} data-testid=\"magnifying-glass\" />\n ) : (\n <CaretDownIcon size={14} data-testid=\"caret-down\" />\n )\n }\n {...props}\n popupRender={dropdownRender}\n removeIcon={<XCircleIcon size={12} />}\n allowClear={\n props.allowClear ? { clearIcon: <XCircleIcon size={14} /> } : false\n }\n showSearch={props.showSearch}\n onSearch={props.onSearch ? handleSearch : undefined}\n onFocus={() => {\n setIsFocused(true)\n }}\n onBlur={() => {\n setIsFocused(false)\n }}\n size={props.size || 'large'}\n />\n )\n}\n","import * as React from 'react'\nimport { Tag as AntdTag, TagProps } from 'antd'\nimport {\n ArrowsClockwiseIcon,\n CheckCircleIcon,\n GearIcon,\n Icon,\n WarningCircleIcon,\n XCircleIcon,\n} from '@phosphor-icons/react'\nimport cx from 'classnames'\nimport './Tag.css'\n\ntype BaseProps = Expand<Omit<TagProps, 'icon'>> & {\n status: 'default' | 'error' | 'success' | 'warning' | 'processing'\n}\n\ntype DefaultSizeProps = BaseProps & {\n size?: 'default'\n icon?: Icon\n showIcon?: boolean\n}\n\ntype SmallSizeProps = BaseProps & {\n size: 'small'\n /** Icons are not supported on the small variant — omit this prop. */\n icon?: never\n showIcon?: never\n}\n\ntype Props = DefaultSizeProps | SmallSizeProps\n\nconst colorToIcon = {\n error: XCircleIcon,\n success: CheckCircleIcon,\n warning: WarningCircleIcon,\n processing: ArrowsClockwiseIcon,\n default: GearIcon,\n}\n\nconst statusToColor = {\n error: 'var(--j2-color-error-text)',\n success: 'var(--j2-color-success)',\n warning: 'var(--j2-color-warning-text)',\n processing: 'var(--j2-color-primary)',\n default: 'var(--j2-color-text)',\n}\n\nexport const Tag = ({\n status,\n showIcon = false,\n icon,\n size = 'default',\n ...props\n}: Props) => {\n const iconComponent = React.useMemo(() => {\n if (!showIcon || size === 'small') return null\n\n const baseProps = {\n size: 12,\n }\n\n const iconName: Icon = icon ?? colorToIcon[status]\n const color: string = statusToColor[status]\n\n return (\n <span role=\"img\" className=\"anticon\" aria-label={`${status} icon`}>\n {React.createElement(iconName, { color, ...baseProps })}\n </span>\n )\n }, [status, showIcon, icon])\n\n const statusToClassName: Partial<Record<keyof typeof statusToColor, string>> =\n {\n default: 'bg-[var(--j2-color-fill-quaternary)]',\n }\n\n return (\n <AntdTag\n {...props}\n color={status}\n icon={iconComponent}\n className={cx(\n props.className,\n statusToClassName[status],\n size === 'small' && '!px-1 !py-0 !h-auto !text-j2-xs !rounded-j2-sm'\n )}\n />\n )\n}\n","import {\n Dropdown as AntdDropdown,\n Select,\n Spin,\n Input,\n SelectProps,\n InputRef,\n Typography,\n} from 'antd'\nimport { DefaultOptionType } from 'antd/es/select'\nimport { useState, useMemo, useRef, useEffect } from 'react'\nimport { LoadingOutlined } from '@ant-design/icons'\nimport type { FlattenOptionData } from 'rc-select/lib/interface'\nimport * as icons from '../icons'\nimport { Tag } from '../tag'\nimport cx from 'classnames'\n\nimport styles from './SummarizedSelect.module.css'\n\ntype Option = DefaultOptionType\ntype OptionWithLogo = Option & {\n logo: React.ReactNode\n}\n\ntype GroupOption = {\n label: string\n options: Option[]\n}\n\nexport type SelectOption = Option | GroupOption | OptionWithLogo\n\nexport type SummarizedSelectVariant = SelectProps['variant'] | 'headlined'\n\nexport type SummarizedSelectTrigger = 'select' | 'dropdown'\n\ntype BaseProps = Omit<\n SelectProps<string | string[], SelectOption>,\n 'mode' | 'value' | 'onChange' | 'variant'\n> & {\n searchPlaceholder?: string\n formControlPlaceholder?: string\n rootClassName?: string\n popupClassName?: string\n variant?: SummarizedSelectVariant\n /**\n * Shape of the control that opens the popup.\n * - `'select'` (default): antd Select, styled by `variant`.\n * - `'dropdown'`: antd Dropdown with a `Typography.Link` target (label + caret).\n * Ignores `variant` — the trigger is always a link.\n */\n trigger?: SummarizedSelectTrigger\n defaultOpen?: boolean\n\n loading?: boolean\n}\n\ntype SingleProps = {\n multiple?: false\n renderLabel?: undefined\n value: string | undefined\n onChange: (newValue: string) => void\n}\n\ntype MultiProps = {\n multiple: true\n renderLabel: (count: number) => string\n value: string[]\n onChange: (newValue: string[]) => void\n}\n\nexport type Props = BaseProps & (SingleProps | MultiProps)\n\nconst isGroupOption = (option: SelectOption): option is GroupOption => {\n return 'options' in option\n}\n\nconst getAllOptions = (options: SelectOption[] | undefined): Option[] => {\n if (!options) return []\n\n return options.flatMap((option) =>\n isGroupOption(option) ? option.options : [option]\n )\n}\n\nconst filterOptions = (\n options: SelectOption[] | undefined,\n searchValue: string\n): SelectOption[] => {\n if (!options) return []\n if (!searchValue) return options\n\n return options\n .map((option) => {\n if (isGroupOption(option)) {\n const filteredSubOptions = option.options.filter((subOption) =>\n subOption.label\n ?.toString()\n .toLowerCase()\n .includes(searchValue.toLowerCase())\n )\n return filteredSubOptions.length > 0\n ? { ...option, options: filteredSubOptions }\n : null\n } else {\n return option.label\n ?.toString()\n .toLowerCase()\n .includes(searchValue.toLowerCase())\n ? option\n : null\n }\n })\n .filter((option): option is SelectOption => option !== null)\n}\n\nexport function SummarizedSelect({\n searchPlaceholder,\n formControlPlaceholder,\n loading,\n multiple,\n value,\n onChange,\n options,\n renderLabel,\n rootClassName,\n popupClassName,\n variant,\n trigger = 'select',\n defaultOpen = false,\n ...props\n}: Props) {\n const isHeadline = variant === 'headlined'\n const antVariant = isHeadline ? 'borderless' : variant\n const [searchValue, setSearchValue] = useState('')\n const [focusTrigger, setFocusTrigger] = useState(defaultOpen ? 1 : 0)\n const [isOpen, setIsOpen] = useState(defaultOpen)\n const inputRef = useRef<InputRef>(null)\n const measureSpanRef = useRef<HTMLSpanElement>(null)\n const [measuredWidth, setMeasuredWidth] = useState<number>()\n\n const displayText = useMemo(() => {\n if (multiple && value.length > 0) {\n return renderLabel(value.length)\n }\n if (!multiple && value) {\n const option = getAllOptions(options).find((opt) => opt.value === value)\n return option ? String(option.label) : String(value)\n }\n return formControlPlaceholder ?? ''\n }, [multiple, value, options, renderLabel, formControlPlaceholder])\n\n useEffect(() => {\n if (!measureSpanRef.current) return\n // padding (22px = 11px each side) + arrow (18px) + border (6px)\n setMeasuredWidth(Math.ceil(measureSpanRef.current.offsetWidth) + 46)\n }, [displayText])\n\n useEffect(() => {\n if (focusTrigger > 0) {\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n setTimeout(() => {\n inputRef.current?.focus({ cursor: 'end' })\n }, 100)\n })\n })\n }\n }, [focusTrigger])\n\n const filteredOptions = useMemo(() => {\n return filterOptions(options, searchValue)\n }, [searchValue, options])\n\n const flatFilteredOptions = useMemo(() => {\n return getAllOptions(filteredOptions)\n }, [filteredOptions])\n\n const allFlatOptions = useMemo(() => {\n return getAllOptions(options)\n }, [options])\n\n const handleTagClose = (removedValue: string) => {\n if (!multiple) return\n\n onChange(value.filter((x) => x !== removedValue))\n }\n\n const handleToggleAll = () => {\n if (!multiple) return\n\n const allFilteredValues = getAllOptions(filteredOptions).map(\n (opt) => opt.value as string\n )\n const someSelected = allFilteredValues.some((val) => value.includes(val))\n\n if (someSelected) {\n onChange(value.filter((val) => !allFilteredValues.includes(val)))\n }\n }\n\n const handleSelectFirstOption = () => {\n if (flatFilteredOptions.length === 0) return\n\n const firstOption = flatFilteredOptions[0]\n if (!firstOption) return\n\n const optionValue = firstOption.value as string\n\n if (multiple) {\n if (value.includes(optionValue)) {\n onChange(value.filter((v) => v !== optionValue))\n } else {\n onChange([...value, optionValue])\n }\n } else {\n onChange(optionValue)\n setIsOpen(false)\n }\n }\n\n const handleOptionClick = (optionValue: string) => {\n if (multiple) {\n if (value.includes(optionValue)) {\n onChange(value.filter((v) => v !== optionValue))\n } else {\n onChange([...value, optionValue])\n }\n } else {\n onChange(optionValue)\n setIsOpen(false)\n }\n }\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n // Allow these navigation keys to bubble up to Select's native keyboard handler\n const navigationKeys = ['ArrowUp', 'ArrowDown']\n\n // Handle Enter - select first filtered option (custom behavior)\n if (e.key === 'Enter') {\n e.preventDefault()\n e.stopPropagation()\n handleSelectFirstOption()\n return\n }\n\n // Handle Escape - close dropdown (custom behavior)\n if (e.key === 'Escape') {\n e.preventDefault()\n e.stopPropagation()\n setIsOpen(false)\n return\n }\n\n // For arrow keys, prevent cursor movement but allow propagation to Select\n if (navigationKeys.includes(e.key)) {\n e.preventDefault() // Prevents cursor from moving to start/end of input text\n // Do NOT call stopPropagation() - let event bubble to Select component\n return\n }\n\n // For all other keys (including Backspace), stop propagation\n // This prevents backspace from removing tags in multiple mode\n e.stopPropagation()\n }\n\n const optionRender = (option: FlattenOptionData<SelectOption>) => {\n if ('logo' in option.data && option.data.logo) {\n return (\n <div className=\"flex items-center gap-2\">\n <div className=\"h-4 shrink-0\">{option.data.logo}</div>\n <span className=\"overflow-ellipsis overflow-hidden\">\n {option.label}\n </span>\n </div>\n )\n }\n return <div>{option.label}</div>\n }\n\n const popupRender = (menu: React.ReactElement) => {\n const valueToLabel = (val: string) => {\n const option = allFlatOptions.find((opt) => opt.value === val)\n return option ? (option.label as string) : val\n }\n\n return (\n <div>\n <div className=\"mb-2 px-2 pb-2 border-b -mx-1 mt-1\">\n <Input\n ref={inputRef}\n key={focusTrigger}\n autoFocus\n placeholder={searchPlaceholder || 'Search...'}\n value={searchValue}\n onChange={(e) => {\n setSearchValue(e.target.value)\n e.stopPropagation()\n e.preventDefault()\n }}\n onKeyDown={handleKeyDown}\n onClick={(e) => e.stopPropagation()}\n prefix={\n <icons.MagnifyingGlassIcon\n size={16}\n className=\"text-j2-text-placeholder\"\n />\n }\n allowClear\n />\n </div>\n {multiple && value.length > 0 ? (\n <div className=\"px-2 pb-2\">\n <div className=\"flex flex-wrap gap-y-1\">\n {(value as string[]).map((value) => (\n <Tag\n className=\"opacity-100 z-10 flex max-w-full\"\n key={value}\n status=\"default\"\n closable\n onClose={() => handleTagClose(value)}\n >\n <span\n className=\"overflow-ellipsis overflow-hidden\"\n title={valueToLabel(value)}\n >\n {valueToLabel(value)}\n </span>\n </Tag>\n ))}\n </div>\n </div>\n ) : null}\n <div\n className={cx(styles.menuContainer, 'rounded-lg', {\n [styles.headlinedMenuContainer]: isHeadline,\n [styles.menuContainerMultiple]: multiple,\n })}\n >\n {menu}\n </div>\n <div className=\"flex justify-between items-center\">\n {multiple && (\n <div className=\"w-full mt-1 pt-1 border-t border-j2-border-secondary\">\n <div\n aria-selected=\"false\"\n className={cx(\n 'ant-select-item ant-select-item-option w-full',\n styles.clearAllButton\n )}\n title=\"Clear all\"\n onClick={handleToggleAll}\n >\n <div className=\"ant-select-item-option-content text-center font-semibold\">\n Clear all\n </div>\n </div>\n </div>\n )}\n </div>\n </div>\n )\n }\n\n const handleOpenChange = (open: boolean) => {\n setIsOpen(open)\n if (open) {\n // Trigger focus by updating the counter\n setFocusTrigger((prev) => prev + 1)\n } else {\n setSearchValue('')\n }\n }\n\n const renderDropdownOptionRow = (option: Option) => {\n const optionValue = option.value as string\n const isSelected = multiple\n ? value.includes(optionValue)\n : value === optionValue\n const hasLogo = 'logo' in option && (option as OptionWithLogo).logo\n return (\n <div\n key={optionValue}\n role=\"option\"\n aria-selected={isSelected}\n onClick={() => handleOptionClick(optionValue)}\n className={cx(\n 'px-3 py-1.5 rounded cursor-pointer text-sm',\n isSelected\n ? 'bg-[var(--j2-color-primary)] text-white hover:bg-[var(--j2-color-primary)]'\n : 'hover:bg-[var(--j2-color-bg-hover)]'\n )}\n >\n {hasLogo ? (\n <div className=\"flex items-center gap-2\">\n <div className=\"h-4 shrink-0\">\n {(option as OptionWithLogo).logo}\n </div>\n <span className=\"overflow-hidden overflow-ellipsis\">\n {option.label}\n </span>\n </div>\n ) : (\n option.label\n )}\n </div>\n )\n }\n\n const dropdownPopupRender = () => {\n const valueToLabel = (val: string) => {\n const option = allFlatOptions.find((opt) => opt.value === val)\n return option ? (option.label as string) : val\n }\n\n return (\n <div className=\"bg-white rounded-lg shadow-md p-2 min-w-[240px]\">\n <div className=\"pb-2 border-b border-j2-border-secondary\">\n <Input\n ref={inputRef}\n key={focusTrigger}\n autoFocus\n placeholder={searchPlaceholder || 'Search...'}\n value={searchValue}\n onChange={(e) => {\n setSearchValue(e.target.value)\n e.stopPropagation()\n }}\n onKeyDown={handleKeyDown}\n onClick={(e) => e.stopPropagation()}\n prefix={\n <icons.MagnifyingGlassIcon\n size={16}\n className=\"text-j2-text-placeholder\"\n />\n }\n allowClear\n />\n </div>\n {multiple && value.length > 0 && (\n <div className=\"px-1 pt-2\">\n <div className=\"flex flex-wrap gap-y-1\">\n {(value as string[]).map((v) => (\n <Tag\n className=\"opacity-100 z-10 flex max-w-full\"\n key={v}\n status=\"default\"\n closable\n onClose={() => handleTagClose(v)}\n >\n <span\n className=\"overflow-ellipsis overflow-hidden\"\n title={valueToLabel(v)}\n >\n {valueToLabel(v)}\n </span>\n </Tag>\n ))}\n </div>\n </div>\n )}\n <div\n className=\"max-h-72 overflow-y-auto py-1\"\n role=\"listbox\"\n aria-multiselectable={multiple || undefined}\n >\n {filteredOptions.length === 0 ? (\n <div className=\"px-3 py-2 text-sm text-[var(--j2-color-text-secondary)]\">\n No options found\n </div>\n ) : (\n filteredOptions.map((opt) => {\n if (isGroupOption(opt)) {\n return (\n <div key={`group-${opt.label}`}>\n <div className=\"px-3 pt-2 pb-1 text-xs font-semibold uppercase tracking-wide text-[var(--j2-color-text-tertiary)]\">\n {opt.label}\n </div>\n {opt.options.map(renderDropdownOptionRow)}\n </div>\n )\n }\n return renderDropdownOptionRow(opt)\n })\n )}\n </div>\n {multiple && value.length > 0 && (\n <div className=\"mt-1 pt-1 border-t border-j2-border-secondary\">\n <div\n role=\"button\"\n aria-label=\"Clear all\"\n title=\"Clear all\"\n onClick={handleToggleAll}\n className={cx(\n 'text-center font-semibold text-sm py-1.5 rounded cursor-pointer',\n styles.clearAllButton\n )}\n >\n Clear all\n </div>\n </div>\n )}\n </div>\n )\n }\n\n if (trigger === 'dropdown') {\n const hasSelection = multiple ? value.length > 0 : Boolean(value)\n const triggerContent = (\n <span className=\"inline-flex items-center gap-1\">\n {hasSelection ? displayText : (formControlPlaceholder ?? 'Select')}\n {loading ? (\n <Spin\n indicator={<LoadingOutlined spin />}\n size=\"small\"\n data-testid=\"loading-spinner\"\n />\n ) : (\n <icons.CaretDownIcon weight=\"regular\" data-testid=\"caret-down\" />\n )}\n </span>\n )\n\n return (\n <AntdDropdown\n open={isOpen}\n onOpenChange={handleOpenChange}\n trigger={['click']}\n disabled={props.disabled}\n popupRender={dropdownPopupRender}\n >\n <Typography.Link\n disabled={props.disabled}\n className={cx('inline-flex', rootClassName)}\n >\n {triggerContent}\n </Typography.Link>\n </AntdDropdown>\n )\n }\n\n return (\n <>\n <span\n ref={measureSpanRef}\n aria-hidden\n style={{\n position: 'absolute',\n visibility: 'hidden',\n whiteSpace: 'nowrap',\n fontSize: 'inherit',\n }}\n >\n {displayText}\n </span>\n <Select<string | string[], SelectOption>\n open={isOpen}\n showSearch={false}\n style={{ width: measuredWidth }}\n suffixIcon={\n loading ? (\n <Spin\n indicator={<LoadingOutlined spin />}\n size=\"small\"\n data-testid=\"loading-spinner\"\n />\n ) : (\n <icons.CaretDownIcon size={14} data-testid=\"caret-down\" />\n )\n }\n placeholder={formControlPlaceholder}\n mode={multiple ? 'multiple' : undefined}\n value={value}\n maxTagCount={0}\n maxTagPlaceholder={multiple ? () => renderLabel(value.length) : value}\n options={filteredOptions}\n onChange={(val) => {\n if (multiple) {\n if (Array.isArray(val)) {\n onChange(val)\n } else {\n throw new Error('Value should be an array in multiple mode')\n }\n } else {\n if (typeof val === 'string') {\n onChange(val)\n } else {\n throw new Error(\n 'Value should be a string in single selection mode'\n )\n }\n }\n }}\n popupRender={popupRender}\n optionRender={optionRender}\n onOpenChange={handleOpenChange}\n classNames={{\n root: cx(rootClassName, styles.summarizedSelect, {\n [styles.hemisphericSelect]:\n variant !== 'underlined' && variant !== 'headlined',\n [styles.isActive]:\n multiple &&\n value.length > 0 &&\n variant !== 'underlined' &&\n variant !== 'headlined',\n [styles.headlinedSelect]: isHeadline,\n }),\n popup: { root: popupClassName },\n }}\n variant={antVariant}\n {...props}\n />\n </>\n )\n}\n","import {\n Skeleton as AntdSkeleton,\n SkeletonProps as AntdSkeletonProps,\n} from 'antd'\n\ntype SkeletonProps = Expand<AntdSkeletonProps>\n\nconst Skeleton = (props: SkeletonProps) => {\n return <AntdSkeleton {...props} />\n}\n\nSkeleton.Node = AntdSkeleton.Node\nSkeleton.Avatar = AntdSkeleton.Avatar\nSkeleton.Input = AntdSkeleton.Input\nSkeleton.Image = AntdSkeleton.Image\nSkeleton.Button = AntdSkeleton.Button\n\nexport { Skeleton }\n","import * as React from \"react\";\nconst SvgProgressCircle = (props) => /* @__PURE__ */ React.createElement(\"svg\", { viewBox: \"0 0 80 80\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"g\", { clipPath: \"url(#clip0_552_202130)\" }, /* @__PURE__ */ React.createElement(\"circle\", { cx: 40, cy: 40, r: 38, stroke: \"black\", strokeOpacity: 0.06, strokeWidth: 4 }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M40 2C48.0248 2 55.8436 4.54049 62.3358 9.25736\", stroke: \"#253761\", strokeWidth: 4, strokeLinecap: \"round\" })), /* @__PURE__ */ React.createElement(\"defs\", null, /* @__PURE__ */ React.createElement(\"clipPath\", { id: \"clip0_552_202130\" }, /* @__PURE__ */ React.createElement(\"rect\", { width: 80, height: 80, fill: \"white\" }))));\nexport default SvgProgressCircle;\n","import { Spin } from 'antd'\nimport Icon from '@ant-design/icons'\n\nimport ProgressCircle from '../../svgs/ProgressCircle.svg?react'\n\ntype SpinnerProps = {\n size?: number\n className?: string\n}\n\nconst SpinIcon = ({ height, width }: { height?: number; width?: number }) => {\n return (\n <Icon spin component={() => <ProgressCircle />} style={{ height, width }} />\n )\n}\n\nexport const Spinner = ({ size = 80, className }: SpinnerProps) => {\n return (\n <Spin\n className={className}\n indicator={<SpinIcon height={size} width={size} />}\n />\n )\n}\n","import { useState, useCallback } from 'react'\n\ninterface UseStepsOptions {\n current?: number\n setCurrent?: (current: number) => void\n totalSteps: number\n initialStep?: number\n}\n\nexport const useSteps = ({\n current,\n setCurrent,\n totalSteps,\n initialStep = 0,\n}: UseStepsOptions) => {\n const [internalCurrent, setInternalCurrent] = useState(initialStep)\n\n const isControlled = current !== undefined && setCurrent !== undefined\n const currentStep = isControlled ? current : internalCurrent\n\n const handleSetCurrent = useCallback(\n (newCurrent: number) => {\n if (isControlled) {\n setCurrent!(newCurrent)\n } else {\n setInternalCurrent(newCurrent)\n }\n },\n [isControlled, setCurrent]\n )\n\n const next = useCallback(() => {\n if (currentStep < totalSteps - 1) {\n handleSetCurrent(currentStep + 1)\n }\n }, [currentStep, totalSteps, handleSetCurrent])\n\n const previous = useCallback(() => {\n if (currentStep > 0) {\n handleSetCurrent(currentStep - 1)\n }\n }, [currentStep, handleSetCurrent])\n\n const goToStep = useCallback(\n (step: number) => {\n if (step >= 0 && step < totalSteps) {\n handleSetCurrent(step)\n }\n },\n [totalSteps, handleSetCurrent]\n )\n\n const cancel = useCallback(() => {\n handleSetCurrent(initialStep)\n }, [handleSetCurrent, initialStep])\n\n return {\n next,\n previous,\n goToStep,\n cancel,\n current: currentStep,\n setCurrent: handleSetCurrent,\n canGoNext: currentStep < totalSteps - 1,\n canGoPrevious: currentStep > 0,\n }\n}\n","import { Steps as AntdSteps, StepsProps, StepProps } from 'antd'\nimport './Steps.css'\nimport { CheckIcon } from '@phosphor-icons/react'\nimport cx from 'classnames'\nimport { useSteps } from './useSteps'\n\ntype AllProps = StepsProps & {\n items: StepProps[]\n dot?: boolean\n current?: number\n setCurrent?: (current: number) => void\n}\n\ntype Props = Expand<AllProps>\n\nexport const Steps = ({\n items,\n current,\n setCurrent,\n dot = false,\n ...props\n}: Props) => {\n const isVertical = props.direction === 'vertical'\n const totalSteps = items?.length || 0\n\n const { current: currentStep, setCurrent: setCurrentStep } = useSteps({\n current,\n setCurrent,\n totalSteps,\n })\n\n return (\n <AntdSteps\n className=\"j2Steps\"\n {...props}\n current={currentStep}\n onChange={(curr) => setCurrentStep(curr)}\n {...(dot && { progressDot: true })}\n items={items?.map((item, index) => {\n return {\n ...item,\n icon:\n !dot && currentStep > index ? (\n <div\n className={cx(\n `check-${props.size}`,\n isVertical ? `vertical-check-icon` : `check-icon`\n )}\n >\n <CheckIcon size={16} />\n </div>\n ) : (\n item.icon\n ),\n }\n })}\n />\n )\n}\n","import { Switch as AntSwitch, SwitchProps } from 'antd'\nimport './Switch.css'\n\ntype AllProps = SwitchProps & {\n small?: boolean\n loading?: boolean\n disabled?: boolean\n checked?: boolean\n onChange?: (checked: boolean, event: Event) => void\n}\n\nexport type Props = Expand<AllProps>\n\nexport const Switch = ({\n small,\n loading = false,\n disabled = false,\n checked,\n onChange,\n ...props\n}: Props) => {\n return (\n <AntSwitch\n {...props}\n size={small ? 'small' : 'default'}\n loading={loading}\n disabled={disabled}\n checked={checked}\n onChange={onChange}\n className=\"j2-switch\"\n />\n )\n}\n","import { Table as AntdTable, SpinProps, TableProps, Tooltip } from 'antd'\nimport cx from 'classnames'\nimport s from './Table.module.css'\nimport { Spinner } from '../spinner'\nimport { withDesignSystemPaginationOverrides } from '../pagination/Pagination'\nimport {\n CaretDownIcon,\n CaretUpIcon,\n CaretUpDownIcon,\n} from '@phosphor-icons/react'\nimport { ComponentProps, ReactNode } from 'react'\nimport { AnyObject } from 'antd/es/_util/type'\n\ntype MergedProps<T> = TableProps<T> & {\n verticalBorders?: boolean\n alternatingRows?: boolean\n columns?: TableProps<T>['columns']\n paginationTextLabels?: boolean\n}\n\ntype Props<T> = Expand<MergedProps<T>>\n\nexport const defaultSortIcon = ({\n sortOrder,\n}: {\n sortOrder: 'ascend' | 'descend' | null\n}) => {\n if (sortOrder == 'ascend') return <CaretUpIcon />\n if (sortOrder == 'descend') return <CaretDownIcon />\n return <CaretUpDownIcon />\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unnecessary-type-constraint\nconst Table = <T extends unknown = any>({\n verticalBorders,\n alternatingRows,\n paginationTextLabels = false,\n ...props\n}: Props<T>) => {\n const defaultLoadingProps: SpinProps = {\n indicator: <Spinner className=\"!w-fit !h-fit !mx-0 translate-x-[-50%]\" />,\n tip: (\n <div className=\"mt-20\">\n <h4>Loading this chart</h4>\n <span className=\"text-lg\">Please wait a moment</span>\n </div>\n ),\n }\n\n const loading: SpinProps | boolean | undefined =\n typeof props.loading == 'object'\n ? { ...props.loading, ...defaultLoadingProps }\n : props.loading && defaultLoadingProps\n\n const isSimpleValue = (\n value: unknown\n ): value is string | number | boolean => {\n return (\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean'\n )\n }\n\n // Helper to extract text content from React elements\n const extractTextContent = (node: unknown): string | null => {\n if (isSimpleValue(node)) {\n return String(node)\n }\n\n // Check if it's a React element with simple text children\n if (\n node &&\n typeof node === 'object' &&\n 'props' in node &&\n node.props &&\n typeof node.props === 'object' &&\n 'children' in node.props\n ) {\n const children = node.props.children\n if (isSimpleValue(children)) {\n return String(children)\n }\n }\n\n return null\n }\n\n const columns = props.columns?.map((column) => {\n const hasEllipsis =\n column.ellipsis === true ||\n (typeof column.ellipsis === 'object' && column.ellipsis)\n\n const originalRender = column.render\n\n return {\n ...column,\n sortIcon: column.sortIcon ?? defaultSortIcon,\n ellipsis: hasEllipsis\n ? {\n showTitle: false, // Disable default browser tooltip\n }\n : column.ellipsis,\n render: (value: unknown, record: T, index: number): ReactNode => {\n const renderedContent = originalRender\n ? originalRender(value, record, index)\n : value\n\n // Render null/undefined as dashes with no tooltip\n if (renderedContent == null) {\n return <span className=\"text-j2-text-secondary\">--</span>\n }\n\n // Try to extract text content for tooltip\n const tooltipText = extractTextContent(renderedContent)\n\n // If we can extract text content, wrap with tooltip\n if (tooltipText) {\n // For simple values, wrap in a span\n if (isSimpleValue(renderedContent)) {\n return (\n <Tooltip title={tooltipText} arrow={false}>\n <span className={hasEllipsis ? 'block truncate' : undefined}>\n {renderedContent}\n </span>\n </Tooltip>\n )\n }\n\n // For React elements, wrap the element itself\n return (\n <Tooltip title={tooltipText} arrow={false}>\n <div>{renderedContent as ReactNode}</div>\n </Tooltip>\n )\n }\n\n // Complex components without extractable text - return as is\n return renderedContent as ReactNode\n },\n }\n })\n\n const paginationConfig = props.pagination\n ? withDesignSystemPaginationOverrides(\n typeof props.pagination === 'object' ? props.pagination : {},\n {\n paginationTextLabels,\n isSmall:\n (typeof props.pagination === 'object' &&\n props.pagination.size === 'small') ||\n props.size === 'small',\n }\n )\n : false\n\n return (\n <div\n className={cx(props.className, {\n [s.bordered]: props.bordered && !verticalBorders,\n [s.alternatingRows]: alternatingRows,\n })}\n >\n <AntdTable<T>\n showSorterTooltip={{ target: 'sorter-icon' }}\n {...props}\n loading={loading}\n columns={columns}\n pagination={paginationConfig}\n rowKey={(record) => JSON.stringify(record)}\n locale={{\n emptyText: (\n <div\n style={{ height: props.scroll?.y || 400, width: 'content-fit' }}\n />\n ),\n }}\n />\n </div>\n )\n}\n\ntype ColumnProps<T extends AnyObject> = Expand<\n ComponentProps<typeof AntdTable.Column<T>>\n>\n\nconst TableColumn = <T extends AnyObject>(props: ColumnProps<T>) => {\n return <AntdTable.Column<T> {...props} sortIcon={defaultSortIcon} />\n}\nTableColumn.displayName = 'Table.Column'\n\nTable.Column = TableColumn\nTable.Summary = AntdTable.Summary\n\nexport type { TableColumnType } from 'antd'\nexport { Table }\n","import { Tabs as AntdTabs, TabsProps } from 'antd'\n\nexport type Props = Expand<TabsProps>\n\nexport const Tabs = (props: Props) => {\n const destroyOnHidden = props.destroyOnHidden ?? true\n return <AntdTabs {...props} destroyOnHidden={destroyOnHidden} />\n}\n","import type * as Highcharts from 'highcharts'\nimport { Chart as HighchartsReact } from '@highcharts/react'\nimport '@highcharts/react/series/Venn.js'\nimport '@highcharts/react/options/Accessibility.js'\nimport { theme } from 'antd'\n\ntype Props = {\n data: Highcharts.PointOptionsObject[]\n title?: string\n tooltip?: Highcharts.TooltipOptions\n onClick?: Highcharts.SeriesClickCallbackFunction\n}\n\nexport const VennDiagram = ({ data, title, tooltip, onClick }: Props) => {\n const { token } = theme.useToken()\n\n const baseFont: Highcharts.CSSObject = {\n fontSize: `${token.fontSize}px`,\n fontFamily: token.fontFamily,\n color: token.colorText,\n textOutline: 'none',\n opacity: 1,\n }\n\n const options: Highcharts.Options = {\n title: {\n text: title,\n },\n ...(tooltip ? { tooltip } : {}),\n chart: {\n spacing: [36, 36, 36, 36],\n },\n series: [\n {\n type: 'venn',\n data,\n events: {\n click: onClick,\n },\n cursor: onClick ? 'pointer' : undefined,\n dataLabels: {\n style: baseFont,\n },\n states: {\n inactive: {\n opacity: 0.3,\n },\n },\n },\n ],\n }\n\n return <HighchartsReact options={options} />\n}\n","import React, { useState, useRef, useEffect } from 'react'\nimport styles from './UserProfile.module.css'\n\nexport interface UserProfileProps {\n firstName: string\n lastName?: string\n avatarUrl?: string\n onLogOut?: () => void\n onChangeClient?: () => void\n}\n\nexport const UserProfile: React.FC<UserProfileProps> = ({\n firstName,\n lastName,\n avatarUrl,\n onLogOut,\n onChangeClient,\n}) => {\n const [isPopoverOpen, setIsPopoverOpen] = useState(false)\n const popoverRef = useRef<HTMLDivElement>(null)\n const buttonRef = useRef<HTMLButtonElement>(null)\n\n // Create display name and avatar\n const displayName = lastName ? `${firstName} ${lastName}` : firstName\n const avatarDisplay = avatarUrl ? (\n <img src={avatarUrl} alt={displayName} className={styles.avatarImage} />\n ) : (\n firstName.charAt(0).toUpperCase()\n )\n\n const togglePopover = () => {\n setIsPopoverOpen(!isPopoverOpen)\n }\n\n // Close popover when clicking outside\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n popoverRef.current &&\n !popoverRef.current.contains(event.target as Node) &&\n buttonRef.current &&\n !buttonRef.current.contains(event.target as Node)\n ) {\n setIsPopoverOpen(false)\n }\n }\n\n document.addEventListener('mousedown', handleClickOutside)\n return () => {\n document.removeEventListener('mousedown', handleClickOutside)\n }\n }, [])\n\n return (\n <div className={styles.userSection}>\n <button\n ref={buttonRef}\n className={styles.userProfile}\n onClick={togglePopover}\n >\n <div className={styles.userAvatar}>{avatarDisplay}</div>\n <span className={styles.userName}>{displayName}</span>\n </button>\n\n {isPopoverOpen && (\n <div ref={popoverRef} className={styles.popover}>\n <div className={styles.popoverUserInfo}>\n <div className={styles.popoverAvatar}>{avatarDisplay}</div>\n <span className={styles.popoverUserName}>{displayName}</span>\n </div>\n\n <div className={styles.popoverActions}>\n <button\n className={styles.logOutButton}\n onClick={() => {\n onLogOut?.()\n setIsPopoverOpen(false)\n }}\n >\n LOG OUT\n </button>\n {onChangeClient && (\n <button\n className={styles.changeClientButton}\n onClick={() => {\n onChangeClient?.()\n setIsPopoverOpen(false)\n }}\n >\n CHANGE CLIENT\n </button>\n )}\n </div>\n </div>\n )}\n </div>\n )\n}\n","import React from 'react'\nimport styles from './LegacyNavMenu.module.css'\nimport J2Logo from '../../svgs/j2-logo-menu-collapse.svg?react'\nimport { UserProfile } from './UserProfile'\n\nexport interface NavItem {\n id: string\n label: string\n icon?: React.ReactNode\n isActive?: boolean\n}\n\nexport interface NavSection {\n title: string\n items: NavItem[]\n}\n\nexport interface LegacyNavMenuUser {\n firstName: string\n lastName?: string\n avatarUrl?: string\n}\n\nexport interface LegacyNavMenuProps {\n sections: NavSection[]\n user: LegacyNavMenuUser\n onItemClick?: (itemId: string) => void\n logoUrl?: string\n onLogOut?: () => void\n onChangeClient?: () => void\n headerSlot?: React.ReactNode\n footerSlot?: React.ReactNode\n}\n\nexport const LegacyNavMenu: React.FC<LegacyNavMenuProps> = ({\n sections,\n user,\n onItemClick,\n logoUrl = '/',\n onLogOut,\n onChangeClient,\n headerSlot,\n footerSlot,\n}) => {\n const handleItemClick = (itemId: string) => {\n onItemClick?.(itemId)\n }\n\n return (\n <div className={styles.navContainer}>\n {/* Logo Section */}\n <div className={styles.logoSection}>\n <div className={styles.logoContainer}>\n <a href={logoUrl} className={styles.logoLink}>\n {/* @ts-expect-error - SVG component props */}\n <J2Logo className={styles.logo} />\n </a>\n </div>\n </div>\n\n {headerSlot && <div className=\"px-4\">{headerSlot}</div>}\n\n {/* Navigation Sections */}\n <div className={styles.navContent}>\n {sections.map((section) => (\n <div key={section.title} className={styles.navSection}>\n {/* Section Header */}\n <div className={styles.sectionHeader}>\n <span className={styles.sectionTitle}>{section.title}</span>\n </div>\n\n {/* Section Items */}\n <div className={styles.sectionItems}>\n {section.items.map((item) => (\n <button\n key={item.id}\n className={`${styles.navItem} ${item.isActive ? styles.active : ''}`}\n onClick={() => handleItemClick(item.id)}\n >\n {item.icon && (\n <div className={styles.navItemIcon}>{item.icon}</div>\n )}\n <span className={styles.navItemLabel}>{item.label}</span>\n </button>\n ))}\n </div>\n </div>\n ))}\n </div>\n\n {footerSlot && <div className=\"px-4\">{footerSlot}</div>}\n\n {/* User Profile Section */}\n <UserProfile\n firstName={user.firstName}\n lastName={user.lastName}\n avatarUrl={user.avatarUrl}\n onLogOut={onLogOut}\n onChangeClient={onChangeClient}\n />\n </div>\n )\n}\n"],"names":["ConfigProvider","jsx","IconContext","theme","React","CheckCircleIcon","XCircleIcon","InfoIcon","WarningCircleIcon","CircleNotchIcon","AntdAlert","styles","XIcon","tooltip","s","renderToString","HighchartsReact","jsxs","AntdBreadcrumb","AntdButton","AntdCard","AntdCheckbox","CaretDownIcon","useMemo","useState","useEffect","useCallback","Icon","Fragment","AntdCollapse","isActive","AntdDrawer","Space","Typography","AntdDropdown","config","Select","index","InputNumber","Input","cloneDeep","useReducer","filter","TrashIcon","PlusCircleIcon","AntdForm","FormItem","FormikAntdInput","forwardRef","RawAntDInput","FormikInputNumber","CaretUpIcon","scrollable","smallPadding","AntdPopover","AntdTooltip","CopyIcon","compact","AntdMenu","getIcon","message","AntdModal","SmallLogo","LogoWithText","ExpandIcon","CollapseIcon","notification","Button","CaretLeftIcon","CaretRightIcon","DotsThreeIcon","CaretDoubleLeftIcon","CaretDoubleRightIcon","AntdPagination","AntdProgress","AntdRadio","AntdRate","StarIcon","isGroupOption","useField","_a","Spin","LoadingOutlined","AntDSelect","MagnifyingGlassIcon","RawAntDSelect","ArrowsClockwiseIcon","GearIcon","AntdTag","useRef","icons.MagnifyingGlassIcon","value","icons.CaretDownIcon","AntdSkeleton","ProgressCircle","AntdSteps","CheckIcon","AntSwitch","CaretUpDownIcon","alternatingRows","Tooltip","AntdTable","AntdTabs","J2Logo"],"mappings":"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"}
|