@indusaction/cms-design-system 0.2.0 → 0.2.1
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/dist/index.cjs +812 -5
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +170 -3
- package/dist/index.d.ts +170 -3
- package/dist/index.js +802 -8
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Button/Button.tsx","../src/theme.ts","../src/components/Tabs/Tabs.tsx","../src/components/Dropdown/Dropdown.tsx","../src/components/Skeleton/Skeleton.tsx","../src/components/Table/Table.tsx","../src/components/Tag/Tag.tsx","../src/components/Link/Link.tsx","../src/components/Card/Card.tsx","../src/components/Modal/Modal.tsx","../src/components/Header/Header.tsx","../src/assets/indusActionLogo.ts","../src/assets/icons.tsx","../src/components/SideNav/SideNav.tsx","../src/components/StatusPage/StatusPage.tsx","../src/components/StatusPage/NotFoundPage.tsx","../src/components/StatusPage/UnauthorizedPage.tsx"],"names":["React","Button","jsx","AntButton","antdTheme","ConfigProvider","AntTabs","AntDropdown","jsxs","AntSkeleton","useState","useEffect","useRef","useCallback","useMemo","Input","Pagination","AntTable","Tag","AntTag","Typography","Link","AntCard","AntModal","Breadcrumb","Avatar","Layout","Grid","getInitials","Popconfirm","Menu","theme","Fragment","createPortal","Drawer","Result"],"mappings":"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","file":"index.cjs","sourcesContent":["import React from \"react\";\nimport { Button as AntButton } from \"antd\";\nimport type { ButtonProps as AntButtonProps } from \"antd\";\n\nexport type ButtonVariant = \"primary\" | \"default\" | \"dashed\" | \"link\" | \"text\";\nexport type ButtonSize = \"large\" | \"middle\" | \"small\";\n\nexport interface ButtonProps\n extends Omit<AntButtonProps, \"type\" | \"variant\" | \"size\" | \"children\"> {\n variant?: ButtonVariant;\n size?: ButtonSize;\n children?: React.ReactNode;\n}\n\nexport const Button = React.forwardRef(function Button(\n { variant = \"default\", size = \"middle\", children, ...rest }: ButtonProps,\n ref: React.Ref<HTMLButtonElement>\n) {\n return (\n <AntButton ref={ref} type={variant} size={size} {...rest}>\n {children}\n </AntButton>\n );\n});\n\nButton.displayName = \"Button\";\n\nexport default Button;\n","import React from \"react\";\nimport { ConfigProvider } from \"antd\";\nimport type { ThemeConfig } from \"antd\";\nimport { theme as antdTheme } from \"antd\";\n\nexport const colors = {\n brand: {\n primary: \"#596993\",\n primaryHover: \"#6B7BA5\",\n primaryActive: \"#4A587C\",\n primaryLight: \"#E8EBF2\",\n accent: \"#F69120\",\n },\n neutral: {\n white: \"#FFFFFF\",\n black: \"#000000\",\n gray50: \"#FAFAFA\",\n gray100: \"#F5F5F5\",\n gray200: \"#E8E8E8\",\n gray300: \"#D9D9D9\",\n gray400: \"#BFBFBF\",\n gray500: \"#8C8C8C\",\n gray600: \"#595959\",\n gray700: \"#434343\",\n gray800: \"#262626\",\n gray900: \"#1F1F1F\",\n },\n semantic: {\n success: \"#52C41A\",\n warning: \"#FAAD14\",\n error: \"#FF4D4F\",\n info: \"#596993\",\n },\n} as const;\n\nexport const spacing = {\n none: 0,\n xxs: 4,\n xs: 8,\n sm: 12,\n md: 16,\n lg: 24,\n xl: 32,\n xxl: 48,\n} as const;\n\nexport const fontSize = {\n xxs: 11,\n xs: 12,\n sm: 14,\n md: 16,\n lg: 20,\n xl: 24,\n xxl: 30,\n} as const;\n\n/** Viewport min-widths. Matches Ant Design's `Grid` / `Sider` breakpoint names. */\nexport const breakpoints = {\n xs: 480,\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1200,\n xxl: 1600,\n} as const;\n\nexport type Colors = typeof colors;\nexport type Spacing = typeof spacing;\nexport type FontSize = typeof fontSize;\nexport type Breakpoints = typeof breakpoints;\n\n/**\n * Seed + map tokens only. Ant Design's algorithm applies these to Button,\n * Menu, Layout, and every other component — no per-component lists.\n */\nexport const theme: ThemeConfig = {\n algorithm: antdTheme.defaultAlgorithm,\n token: {\n colorPrimary: colors.brand.primary,\n colorPrimaryHover: colors.brand.primaryHover,\n colorPrimaryActive: colors.brand.primaryActive,\n colorPrimaryBg: colors.brand.primaryLight,\n colorLink: colors.brand.primary,\n colorInfo: colors.semantic.info,\n colorSuccess: colors.semantic.success,\n colorWarning: colors.semantic.warning,\n colorError: colors.semantic.error,\n paddingXXS: spacing.xxs,\n paddingXS: spacing.xs,\n paddingSM: spacing.sm,\n padding: spacing.md,\n paddingMD: spacing.md,\n paddingLG: spacing.lg,\n paddingXL: spacing.xl,\n marginXXS: spacing.xxs,\n marginXS: spacing.xs,\n marginSM: spacing.sm,\n margin: spacing.md,\n marginMD: spacing.md,\n marginLG: spacing.lg,\n marginXL: spacing.xl,\n marginXXL: spacing.xxl,\n fontSizeSM: fontSize.xs,\n fontSize: fontSize.sm,\n fontSizeLG: fontSize.md,\n fontSizeXL: fontSize.lg,\n fontSizeHeading5: fontSize.md,\n fontSizeHeading4: fontSize.lg,\n fontSizeHeading3: fontSize.xl,\n fontSizeHeading2: fontSize.xxl,\n screenXS: breakpoints.xs,\n screenSM: breakpoints.sm,\n screenMD: breakpoints.md,\n screenLG: breakpoints.lg,\n screenXL: breakpoints.xl,\n screenXXL: breakpoints.xxl,\n },\n};\n\nexport interface ThemeProviderProps {\n children: React.ReactNode;\n}\n\nexport function ThemeProvider({ children }: ThemeProviderProps) {\n return React.createElement(ConfigProvider, { theme }, children);\n}\n","import React from \"react\";\nimport { Tabs as AntTabs, ConfigProvider } from \"antd\";\nimport type { TabsProps as AntTabsProps, TabPaneProps } from \"antd\";\nimport { fontSize } from \"../../theme\";\n\nexport type { TabPaneProps };\n\nexport interface TabsProps extends Omit<AntTabsProps, \"type\"> {\n type?: \"line\" | \"card\";\n}\n\nexport const Tabs: React.FC<TabsProps> = ({ type = \"line\", ...rest }) => {\n return (\n <ConfigProvider\n theme={{\n components: {\n Tabs: {\n titleFontSizeSM: fontSize.sm,\n titleFontSize: fontSize.md,\n titleFontSizeLG: fontSize.lg,\n },\n },\n }}\n >\n <AntTabs type={type} {...rest} />\n </ConfigProvider>\n );\n};\n\nTabs.displayName = \"Tabs\";\n\nexport default Tabs;\n","import React from \"react\";\nimport { Dropdown as AntDropdown, ConfigProvider } from \"antd\";\nimport type {\n DropdownProps as AntDropdownProps,\n MenuProps,\n} from \"antd\";\nimport type { DropdownButtonProps as AntDropdownButtonProps } from \"antd/es/dropdown\";\nimport { spacing } from \"../../theme\";\n\nexport type { MenuProps };\n\nexport interface DropdownProps extends AntDropdownProps {\n children?: React.ReactNode;\n}\n\nexport interface DropdownButtonProps extends AntDropdownButtonProps {\n children?: React.ReactNode;\n}\n\nconst DropdownButton: React.FC<DropdownButtonProps> = ({\n children,\n ...rest\n}) => {\n return (\n <ConfigProvider\n theme={{\n components: {\n Dropdown: {\n paddingXXS: spacing.xxs,\n paddingXS: spacing.xs,\n },\n },\n }}\n >\n <AntDropdown.Button {...rest}>{children}</AntDropdown.Button>\n </ConfigProvider>\n );\n};\nDropdownButton.displayName = \"Dropdown.Button\";\n\nexport interface DropdownInterface extends React.FC<DropdownProps> {\n Button: typeof DropdownButton;\n}\n\nexport const Dropdown: DropdownInterface = ({ children, ...rest }: DropdownProps) => {\n return (\n <ConfigProvider\n theme={{\n components: {\n Dropdown: {\n paddingXXS: spacing.xxs,\n paddingXS: spacing.xs,\n },\n },\n }}\n >\n <AntDropdown {...rest}>{children}</AntDropdown>\n </ConfigProvider>\n );\n};\n\nDropdown.Button = DropdownButton;\nDropdown.displayName = \"Dropdown\";\n\nexport default Dropdown;\n","import React from \"react\";\nimport { Skeleton as AntSkeleton } from \"antd\";\nimport type { SkeletonProps as AntSkeletonProps } from \"antd\";\nimport { spacing } from \"../../theme\";\n\nexport type SkeletonProps = AntSkeletonProps;\n\nexport interface DetailsSkeletonProps {\n /** Number of label/value placeholder rows. Default: 5 */\n rows?: number;\n /** Show an avatar + title block above the fields. */\n avatar?: boolean;\n}\n\nfunction DetailsSkeleton({ rows = 5, avatar = false }: DetailsSkeletonProps) {\n return (\n <div aria-busy=\"true\" aria-live=\"polite\">\n {avatar ? (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: spacing.md,\n marginBottom: spacing.lg,\n }}\n >\n <AntSkeleton.Avatar active size={48} />\n <div style={{ flex: 1, minWidth: 0 }}>\n <AntSkeleton.Input\n active\n size=\"small\"\n style={{ width: 180, maxWidth: \"70%\", height: 16, marginBottom: spacing.xs }}\n />\n <AntSkeleton.Input\n active\n size=\"small\"\n style={{ width: 120, maxWidth: \"50%\", height: 12 }}\n />\n </div>\n </div>\n ) : null}\n {Array.from({ length: rows }, (_, index) => (\n <div\n key={index}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: spacing.lg,\n marginBottom: spacing.md,\n }}\n >\n <AntSkeleton.Input\n active\n size=\"small\"\n style={{ width: 88, height: 12, flex: \"0 0 88px\" }}\n />\n <AntSkeleton.Input\n active\n size=\"small\"\n style={{\n width: `${58 + (index % 3) * 14}%`,\n maxWidth: 280,\n height: 14,\n minWidth: 0,\n flex: 1,\n }}\n />\n </div>\n ))}\n </div>\n );\n}\n\nDetailsSkeleton.displayName = \"Skeleton.Details\";\n\nexport interface SkeletonInterface extends React.FC<SkeletonProps> {\n Button: typeof AntSkeleton.Button;\n Avatar: typeof AntSkeleton.Avatar;\n Input: typeof AntSkeleton.Input;\n Image: typeof AntSkeleton.Image;\n Node: typeof AntSkeleton.Node;\n Details: typeof DetailsSkeleton;\n}\n\nexport const Skeleton: SkeletonInterface = ({ active = true, ...rest }) => {\n return <AntSkeleton active={active} {...rest} />;\n};\n\nSkeleton.Button = AntSkeleton.Button;\nSkeleton.Avatar = AntSkeleton.Avatar;\nSkeleton.Input = AntSkeleton.Input;\nSkeleton.Image = AntSkeleton.Image;\nSkeleton.Node = AntSkeleton.Node;\nSkeleton.Details = DetailsSkeleton;\nSkeleton.displayName = \"Skeleton\";\n\nexport default Skeleton;\n","import React, { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { Table as AntTable, Input, Pagination, ConfigProvider } from \"antd\";\nimport type { TablePaginationConfig } from \"antd\";\nimport type {\n ColumnGroupType,\n ColumnType,\n TableProps as AntTableProps,\n} from \"antd/es/table\";\nimport type {\n FilterValue,\n SorterResult,\n TableCurrentDataSource,\n} from \"antd/es/table/interface\";\nimport { colors, spacing, breakpoints } from \"../../theme\";\nimport { Skeleton } from \"../Skeleton\";\n\nexport type TableMode = \"client\" | \"server\";\nexport type TableSortOrder = \"ascend\" | \"descend\" | null;\n\nexport type TableQuery = {\n search: string;\n page: number;\n pageSize: number;\n sortField?: React.Key | readonly React.Key[];\n sortOrder?: TableSortOrder;\n filters: Record<string, FilterValue | null>;\n};\n\nexport type TableSearchConfig = {\n placeholder?: string;\n value?: string;\n defaultValue?: string;\n onChange?: (value: string) => void;\n debounceMs?: number;\n};\n\nexport type TableColumnType<T> = ColumnType<T> & {\n /** Include this column in free-text search. Default: true when `dataIndex` is set. */\n searchable?: boolean;\n};\n\nexport type TableColumnGroupType<T> = Omit<ColumnGroupType<T>, \"children\"> & {\n children: TableColumnsType<T>;\n};\n\nexport type TableColumnsType<T> = (TableColumnGroupType<T> | TableColumnType<T>)[];\n\nexport interface TableProps<T extends object>\n extends Omit<AntTableProps<T>, \"columns\" | \"onChange\" | \"pagination\"> {\n columns?: TableColumnsType<T>;\n /**\n * `client` (default): search, filters, sort, and pagination run on `dataSource`.\n * `server`: `dataSource` is the current page only. Pass `pagination.total` from the\n * API and handle `onQueryChange` to fetch the next page / search / sort / filters.\n */\n mode?: TableMode;\n /** Free-text search, shown on the same row as pagination above the table. Pass `false` to hide it. */\n search?: boolean | TableSearchConfig;\n pagination?: false | TablePaginationConfig;\n onChange?: (\n pagination: TablePaginationConfig,\n filters: Record<string, FilterValue | null>,\n sorter: SorterResult<T> | SorterResult<T>[],\n extra: TableCurrentDataSource<T>\n ) => void;\n /** Fires whenever search, page, page size, sort, or column filters change. */\n onQueryChange?: (query: TableQuery) => void;\n}\n\nconst DEFAULT_PAGE_SIZE = 10;\n\nfunction isColumnGroup<T>(\n column: TableColumnGroupType<T> | TableColumnType<T>\n): column is TableColumnGroupType<T> {\n return \"children\" in column && Array.isArray(column.children);\n}\n\nfunction getByDataIndex<T extends object>(\n record: T,\n dataIndex: ColumnType<T>[\"dataIndex\"]\n): unknown {\n if (dataIndex == null) return undefined;\n const path = Array.isArray(dataIndex) ? dataIndex : [dataIndex];\n let current: unknown = record;\n for (const key of path) {\n if (current == null || typeof current !== \"object\") return undefined;\n current = (current as Record<string | number, unknown>)[key as string | number];\n }\n return current;\n}\n\nfunction compareValues(a: unknown, b: unknown): number {\n if (a == null && b == null) return 0;\n if (a == null) return -1;\n if (b == null) return 1;\n if (typeof a === \"number\" && typeof b === \"number\") return a - b;\n return String(a).localeCompare(String(b), undefined, {\n numeric: true,\n sensitivity: \"base\",\n });\n}\n\nfunction flattenColumns<T>(columns: TableColumnsType<T>): TableColumnType<T>[] {\n const result: TableColumnType<T>[] = [];\n for (const column of columns) {\n if (isColumnGroup(column)) {\n result.push(...flattenColumns(column.children));\n } else {\n result.push(column);\n }\n }\n return result;\n}\n\nfunction matchesSearch<T extends object>(\n record: T,\n search: string,\n columns: TableColumnsType<T>\n): boolean {\n const query = search.trim().toLowerCase();\n if (!query) return true;\n\n const leaves = flattenColumns(columns);\n const optedIn = leaves.filter((column) => column.searchable === true);\n const pool = optedIn.length > 0 ? optedIn : leaves.filter((column) => column.searchable !== false);\n\n return pool.some((column) => {\n const value = getByDataIndex(record, column.dataIndex);\n if (value == null) return false;\n return String(value).toLowerCase().includes(query);\n });\n}\n\nfunction defaultCompare<T extends object>(dataIndex: ColumnType<T>[\"dataIndex\"]) {\n return (a: T, b: T) => compareValues(getByDataIndex(a, dataIndex), getByDataIndex(b, dataIndex));\n}\n\nfunction enhanceColumnsForClient<T extends object>(\n columns: TableColumnsType<T>\n): TableColumnsType<T> {\n return columns.map((column) => {\n if (isColumnGroup(column)) {\n return { ...column, children: enhanceColumnsForClient(column.children) };\n }\n\n const next: TableColumnType<T> = { ...column };\n\n if (next.sorter === true && next.dataIndex != null) {\n next.sorter = defaultCompare(next.dataIndex);\n }\n\n if (next.filters && !next.onFilter && next.dataIndex != null) {\n next.onFilter = (value, record) =>\n String(getByDataIndex(record, next.dataIndex)) === String(value);\n }\n\n return next;\n });\n}\n\nfunction adaptColumnsForServer<T extends object>(\n columns: TableColumnsType<T>\n): TableColumnsType<T> {\n return columns.map((column) => {\n if (isColumnGroup(column)) {\n return { ...column, children: adaptColumnsForServer(column.children) };\n }\n\n const next: TableColumnType<T> = { ...column };\n\n if (typeof next.sorter === \"function\") {\n next.sorter = true;\n } else if (next.sorter && typeof next.sorter === \"object\" && \"compare\" in next.sorter) {\n const { compare: _compare, ...rest } = next.sorter;\n next.sorter = Object.keys(rest).length > 0 ? rest : true;\n }\n\n if (next.onFilter) {\n delete next.onFilter;\n }\n\n return next;\n });\n}\n\nconst SKELETON_WIDTHS = [72, 88, 64, 80, 56];\n\nfunction skeletonizeColumns<T extends object>(\n columns: TableColumnsType<T>\n): TableColumnsType<T> {\n return columns.map((column, index) => {\n if (isColumnGroup(column)) {\n return { ...column, children: skeletonizeColumns(column.children) };\n }\n\n const widthPct = SKELETON_WIDTHS[index % SKELETON_WIDTHS.length];\n return {\n ...column,\n sorter: false,\n filters: undefined,\n onFilter: undefined,\n filterDropdown: undefined,\n render: () => (\n <Skeleton.Input\n active\n size=\"small\"\n style={{ width: `${widthPct}%`, height: 14, minWidth: 40 }}\n />\n ),\n };\n });\n}\n\nfunction isTableLoading(loading: AntTableProps[\"loading\"]): boolean {\n if (loading == null) return false;\n if (typeof loading === \"boolean\") return loading;\n return loading.spinning !== false;\n}\n\nfunction firstSorter<T>(\n sorter: SorterResult<T> | SorterResult<T>[]\n): SorterResult<T> | undefined {\n return Array.isArray(sorter) ? sorter[0] : sorter;\n}\n\nfunction getTableLayout() {\n if (typeof window === \"undefined\") {\n return { isPhone: false, isTablet: false };\n }\n const width = window.innerWidth;\n return {\n isPhone: width < breakpoints.md,\n isTablet: width >= breakpoints.md && width < breakpoints.lg,\n };\n}\n\nfunction useTableLayout() {\n const [layout, setLayout] = useState(getTableLayout);\n\n useEffect(() => {\n const phoneQuery = window.matchMedia(`(max-width: ${breakpoints.md - 1}px)`);\n const tabletQuery = window.matchMedia(\n `(min-width: ${breakpoints.md}px) and (max-width: ${breakpoints.lg - 1}px)`\n );\n\n const update = () => setLayout(getTableLayout());\n update();\n phoneQuery.addEventListener(\"change\", update);\n tabletQuery.addEventListener(\"change\", update);\n return () => {\n phoneQuery.removeEventListener(\"change\", update);\n tabletQuery.removeEventListener(\"change\", update);\n };\n }, []);\n\n return layout;\n}\n\nfunction resolveSearchConfig(\n search: TableProps<object>[\"search\"],\n mode: TableMode\n): (TableSearchConfig & { enabled: boolean }) | { enabled: false } {\n if (search === false) return { enabled: false };\n const config = search === true || search == null ? {} : search;\n return {\n enabled: true,\n placeholder: \"Search\",\n debounceMs: mode === \"server\" ? 300 : 0,\n ...config,\n };\n}\n\nexport function Table<T extends object>({\n columns = [],\n dataSource,\n mode = \"client\",\n search = true,\n pagination,\n onChange,\n onQueryChange,\n scroll,\n size,\n loading = false,\n rowKey,\n ...rest\n}: TableProps<T>) {\n const { isPhone, isTablet } = useTableLayout();\n const paginationObj = pagination === false ? undefined : pagination;\n const searchConfig = resolveSearchConfig(search, mode);\n\n const [query, setQuery] = useState<TableQuery>(() => ({\n search:\n (searchConfig.enabled && (searchConfig.value ?? searchConfig.defaultValue)) || \"\",\n page: paginationObj?.current ?? 1,\n pageSize: paginationObj?.pageSize ?? DEFAULT_PAGE_SIZE,\n filters: {},\n sortOrder: null,\n }));\n const [inputSearch, setInputSearch] = useState(query.search);\n const [clientFilteredCount, setClientFilteredCount] = useState<number | null>(null);\n\n const queryRef = useRef(query);\n queryRef.current = query;\n\n const onQueryChangeRef = useRef(onQueryChange);\n onQueryChangeRef.current = onQueryChange;\n\n const searchOnChangeRef = useRef(\n searchConfig.enabled ? searchConfig.onChange : undefined\n );\n searchOnChangeRef.current = searchConfig.enabled ? searchConfig.onChange : undefined;\n\n const debounceMs = searchConfig.enabled ? searchConfig.debounceMs ?? 0 : 0;\n const debounceTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n const controlledSearch = searchConfig.enabled ? searchConfig.value : undefined;\n\n useEffect(() => {\n if (controlledSearch === undefined) return;\n setInputSearch(controlledSearch);\n setQuery((prev) =>\n prev.search === controlledSearch ? prev : { ...prev, search: controlledSearch }\n );\n }, [controlledSearch]);\n\n useEffect(() => {\n if (paginationObj?.current != null) {\n setQuery((prev) =>\n prev.page === paginationObj.current ? prev : { ...prev, page: paginationObj.current! }\n );\n }\n }, [paginationObj?.current]);\n\n useEffect(() => {\n if (paginationObj?.pageSize != null) {\n setQuery((prev) =>\n prev.pageSize === paginationObj.pageSize\n ? prev\n : { ...prev, pageSize: paginationObj.pageSize! }\n );\n }\n }, [paginationObj?.pageSize]);\n\n useEffect(() => {\n return () => {\n if (debounceTimer.current) clearTimeout(debounceTimer.current);\n };\n }, []);\n\n const resolvedQuery: TableQuery = {\n ...query,\n search: controlledSearch ?? query.search,\n page: paginationObj?.current ?? query.page,\n pageSize: paginationObj?.pageSize ?? query.pageSize,\n };\n\n const emitQuery = useCallback((next: TableQuery) => {\n setQuery(next);\n queryRef.current = next;\n onQueryChangeRef.current?.(next);\n }, []);\n\n const commitSearch = useCallback(\n (value: string, immediate = false) => {\n const run = () => {\n searchOnChangeRef.current?.(value);\n emitQuery({ ...queryRef.current, search: value, page: 1 });\n };\n\n if (debounceTimer.current) {\n clearTimeout(debounceTimer.current);\n debounceTimer.current = null;\n }\n\n if (immediate || debounceMs <= 0) {\n run();\n return;\n }\n\n debounceTimer.current = setTimeout(run, debounceMs);\n },\n [debounceMs, emitQuery]\n );\n\n const rows = useMemo(() => {\n const source = (dataSource ?? []) as T[];\n if (mode === \"server\" || !searchConfig.enabled) return source;\n return source.filter((record) => matchesSearch(record, resolvedQuery.search, columns));\n }, [columns, dataSource, mode, resolvedQuery.search, searchConfig.enabled]);\n\n useEffect(() => {\n setClientFilteredCount(null);\n }, [resolvedQuery.search, dataSource]);\n\n const resolvedColumns = useMemo(\n () =>\n mode === \"server\"\n ? adaptColumnsForServer(columns)\n : enhanceColumnsForClient(columns),\n [columns, mode]\n );\n\n const tableLoading = isTableLoading(loading);\n const skeletonRowCount = resolvedQuery.pageSize || DEFAULT_PAGE_SIZE;\n\n const displayColumns = useMemo(\n () => (tableLoading ? skeletonizeColumns(resolvedColumns) : resolvedColumns),\n [resolvedColumns, tableLoading]\n );\n\n const displayRows = useMemo(() => {\n if (!tableLoading) return rows;\n return Array.from({ length: skeletonRowCount }, (_, index) => ({\n __skeletonKey: `skeleton-${index}`,\n })) as unknown as T[];\n }, [rows, skeletonRowCount, tableLoading]);\n\n const displayRowKey: AntTableProps<T>[\"rowKey\"] = tableLoading\n ? (record) => String((record as { __skeletonKey?: string }).__skeletonKey)\n : rowKey;\n\n const paginationTotal =\n mode === \"server\"\n ? paginationObj?.total ?? rows.length\n : clientFilteredCount ?? rows.length;\n\n const resolvedPagination = useMemo(() => {\n if (pagination === false) return false;\n\n const merged: TablePaginationConfig = {\n showSizeChanger: true,\n showQuickJumper: true,\n pageSizeOptions: [\"10\", \"20\", \"50\"],\n showTotal: (total, range) => `${range[0]}–${range[1]} of ${total}`,\n ...paginationObj,\n current: resolvedQuery.page,\n pageSize: resolvedQuery.pageSize,\n style: { display: \"none\" },\n };\n\n if (mode === \"server\") {\n merged.total = paginationTotal;\n }\n\n return merged;\n }, [\n mode,\n pagination,\n paginationObj,\n paginationTotal,\n resolvedQuery.page,\n resolvedQuery.pageSize,\n ]);\n\n const handleTableChange: NonNullable<AntTableProps<T>[\"onChange\"]> = (\n nextPagination,\n filters,\n sorter,\n extra\n ) => {\n const active = firstSorter(sorter);\n const next: TableQuery = {\n ...queryRef.current,\n page: extra.action === \"paginate\" ? nextPagination.current ?? 1 : 1,\n pageSize: nextPagination.pageSize ?? queryRef.current.pageSize,\n filters,\n sortField: active?.field,\n sortOrder: active?.order ?? null,\n };\n\n if (mode === \"client\") {\n setClientFilteredCount(extra.currentDataSource.length);\n }\n\n emitQuery(next);\n onChange?.(nextPagination, filters, sorter, extra);\n };\n\n const handlePaginationChange = (page: number, pageSize: number) => {\n const next: TableQuery = {\n ...queryRef.current,\n page,\n pageSize,\n };\n emitQuery(next);\n onChange?.(\n { current: page, pageSize, total: paginationTotal },\n next.filters,\n {\n field: next.sortField,\n order: next.sortOrder,\n },\n { currentDataSource: rows, action: \"paginate\" }\n );\n };\n\n const bothControls = searchConfig.enabled && pagination !== false;\n const compactPager = isPhone || isTablet;\n\n return (\n <ConfigProvider\n theme={{\n components: {\n Table: {\n headerBg: colors.neutral.gray50,\n },\n },\n }}\n >\n <div style={{ minWidth: 0, width: \"100%\" }}>\n {searchConfig.enabled || pagination !== false ? (\n <div\n style={\n isPhone\n ? {\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"stretch\",\n gap: spacing.sm,\n marginBottom: spacing.md,\n }\n : {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: bothControls\n ? \"space-between\"\n : searchConfig.enabled\n ? \"flex-start\"\n : \"flex-end\",\n gap: spacing.md,\n flexWrap: isTablet ? \"wrap\" : \"nowrap\",\n marginBottom: spacing.md,\n }\n }\n >\n {searchConfig.enabled ? (\n <Input.Search\n allowClear\n disabled={tableLoading}\n placeholder={searchConfig.placeholder}\n value={inputSearch}\n onChange={(event) => {\n const value = event.target.value;\n setInputSearch(value);\n commitSearch(value);\n }}\n onSearch={(value) => {\n setInputSearch(value);\n commitSearch(value, true);\n }}\n style={\n isPhone\n ? { width: \"100%\" }\n : isTablet\n ? {\n width: 240,\n maxWidth: \"100%\",\n flex: \"0 1 240px\",\n minWidth: 160,\n }\n : { width: 320, flex: \"0 0 320px\", maxWidth: \"100%\" }\n }\n />\n ) : null}\n {pagination !== false ? (\n <div\n style={{\n display: \"flex\",\n justifyContent: isPhone ? \"center\" : \"flex-end\",\n maxWidth: \"100%\",\n minWidth: 0,\n overflowX: \"auto\",\n flex: isPhone ? undefined : \"1 1 auto\",\n }}\n >\n <Pagination\n current={resolvedQuery.page}\n pageSize={resolvedQuery.pageSize}\n total={paginationTotal}\n size={compactPager ? \"small\" : undefined}\n simple={isPhone}\n showLessItems={compactPager}\n responsive\n showSizeChanger={paginationObj?.showSizeChanger ?? !isPhone}\n showQuickJumper={paginationObj?.showQuickJumper ?? !compactPager}\n pageSizeOptions={paginationObj?.pageSizeOptions ?? [\"10\", \"20\", \"50\"]}\n showTotal={\n paginationObj?.showTotal ??\n (isPhone\n ? (total, range) => `${range[0]}–${range[1]} of ${total}`\n : compactPager\n ? undefined\n : (total, range) => `${range[0]}–${range[1]} of ${total}`)\n }\n disabled={paginationObj?.disabled || tableLoading}\n onChange={handlePaginationChange}\n style={{ margin: 0, flexShrink: 0 }}\n />\n </div>\n ) : null}\n </div>\n ) : null}\n <AntTable<T>\n {...rest}\n size={size ?? (isPhone ? \"small\" : \"middle\")}\n scroll={{ x: \"max-content\", ...scroll }}\n columns={displayColumns}\n dataSource={displayRows}\n rowKey={displayRowKey}\n pagination={resolvedPagination}\n onChange={handleTableChange}\n />\n </div>\n </ConfigProvider>\n );\n}\n\nTable.displayName = \"Table\";\n\nexport default Table;\n","import React from \"react\";\nimport { Tag as AntTag } from \"antd\";\nimport type { TagProps as AntTagProps } from \"antd\";\n\nexport interface TagProps extends AntTagProps {\n children?: React.ReactNode;\n}\n\nexport const Tag = React.forwardRef(function Tag(\n { children, ...rest }: TagProps,\n ref: React.Ref<HTMLSpanElement>\n) {\n return (\n <AntTag ref={ref} {...rest}>\n {children}\n </AntTag>\n );\n});","import React from \"react\";\nimport { Typography } from \"antd\";\nimport type { LinkProps as AntLinkProps } from \"antd/es/typography/Link\";\n\nconst { Link: AntLink } = Typography;\n\nexport interface LinkProps extends AntLinkProps {\n children?: React.ReactNode;\n}\n\nexport const Link = React.forwardRef(function Link(\n { children, ...rest }: LinkProps,\n ref: React.Ref<HTMLElement>\n) {\n return (\n <AntLink ref={ref} {...rest}>\n {children}\n </AntLink>\n );\n});","import React from \"react\";\nimport { Card as AntCard } from \"antd\";\nimport type { CardProps as AntCardProps } from \"antd\";\nimport { Skeleton } from \"../Skeleton\";\nimport \"./Card.css\";\n\nexport interface CardProps extends Omit<AntCardProps, \"title\" | \"loading\"> {\n title?: React.ReactNode;\n description?: React.ReactNode;\n tags?: React.ReactNode;\n extraInfo?: React.ReactNode;\n ctas?: React.ReactNode;\n layout?: \"inline\" | \"grid\";\n children?: React.ReactNode;\n /** Replace body content with a details skeleton while data is loading. */\n loading?: boolean;\n /** Placeholder field rows shown when `loading` is true. Default: 5 */\n loadingRows?: number;\n}\n\nexport const Card = React.forwardRef<HTMLDivElement, CardProps>(\n (\n {\n title,\n description,\n tags,\n extraInfo,\n ctas,\n layout = \"inline\",\n children,\n className = \"\",\n loading = false,\n loadingRows = 5,\n ...rest\n },\n ref\n ) => {\n return (\n <AntCard\n ref={ref}\n className={`cms-card cms-card-${layout} ${className}`}\n {...rest}\n >\n <div className=\"cms-card-content\">\n <div className=\"cms-card-main\">\n {title && <div className=\"cms-card-title\">{title}</div>}\n\n {description && (\n <div className=\"cms-card-description\">{description}</div>\n )}\n\n {tags && <div className=\"cms-card-tags\">{tags}</div>}\n\n {extraInfo && (\n <div className=\"cms-card-extra-info\">{extraInfo}</div>\n )}\n\n {loading ? <Skeleton.Details rows={loadingRows} /> : children}\n </div>\n\n {ctas && <div className=\"cms-card-ctas\">{ctas}</div>}\n </div>\n </AntCard>\n );\n }\n);\n\nCard.displayName = \"Card\";\n","import React from \"react\";\nimport { Modal as AntModal } from \"antd\";\nimport type { ModalProps as AntModalProps, ModalFuncProps } from \"antd\";\n\nexport type { ModalFuncProps };\n\nexport interface ModalProps extends AntModalProps {\n children?: React.ReactNode;\n}\n\nexport interface ModalInterface extends React.FC<ModalProps> {\n info: typeof AntModal.info;\n success: typeof AntModal.success;\n error: typeof AntModal.error;\n warning: typeof AntModal.warning;\n warn: typeof AntModal.warn;\n confirm: typeof AntModal.confirm;\n destroyAll: typeof AntModal.destroyAll;\n config: typeof AntModal.config;\n useModal: typeof AntModal.useModal;\n}\n\nexport const Modal: ModalInterface = ({ children, ...rest }) => {\n return <AntModal {...rest}>{children}</AntModal>;\n};\n\nModal.info = AntModal.info;\nModal.success = AntModal.success;\nModal.error = AntModal.error;\nModal.warning = AntModal.warning;\nModal.warn = AntModal.warn;\nModal.confirm = AntModal.confirm;\nModal.destroyAll = AntModal.destroyAll;\nModal.config = AntModal.config;\nModal.useModal = AntModal.useModal;\nModal.displayName = \"Modal\";\n\nexport default Modal;\n","import React from \"react\";\nimport { Avatar, Breadcrumb, Typography } from \"antd\";\nimport { colors, spacing, fontSize, breakpoints } from \"../../theme\";\nimport { Button } from \"../Button\";\nimport type { ButtonVariant } from \"../Button\";\nimport { Dropdown } from \"../Dropdown\";\nimport type { MenuProps } from \"../Dropdown\";\n\nconst { Text, Title } = Typography;\n\nexport type HeaderBreadcrumb = {\n title: React.ReactNode;\n href?: string;\n onClick?: () => void;\n};\n\nexport type HeaderUser = {\n name: string;\n role?: string;\n avatarSrc?: string;\n};\n\nexport type HeaderAction = {\n key: string;\n label: React.ReactNode;\n variant?: ButtonVariant;\n icon?: React.ReactNode;\n onClick?: () => void;\n href?: string;\n disabled?: boolean;\n danger?: boolean;\n};\n\nexport interface HeaderProps {\n /** Page title on the left of the bar. */\n title?: React.ReactNode;\n /** Supporting text under the title. `description` is preferred. */\n description?: React.ReactNode;\n /** @deprecated Use `description`. */\n subtitle?: React.ReactNode;\n breadcrumbs?: HeaderBreadcrumb[];\n /** Primary CTAs, rendered on the top-right of the bar. */\n actions?: HeaderAction[];\n /** Extra nodes after the CTA buttons (filters, custom controls). */\n extra?: React.ReactNode;\n /** Slot before the title — typically a mobile menu button. */\n leading?: React.ReactNode;\n user?: HeaderUser | null;\n userMenu?: MenuProps;\n onLogout?: () => void;\n sticky?: boolean;\n className?: string;\n style?: React.CSSProperties;\n}\n\nfunction getInitials(name: string): string {\n const parts = name.trim().split(/\\s+/).filter(Boolean);\n if (parts.length === 0) return \"\";\n if (parts.length === 1) return parts[0].charAt(0).toUpperCase();\n return `${parts[0].charAt(0)}${parts[parts.length - 1].charAt(0)}`.toUpperCase();\n}\n\nexport const Header = React.forwardRef<HTMLElement, HeaderProps>(\n (\n {\n title,\n description,\n subtitle,\n breadcrumbs,\n actions,\n extra,\n leading,\n user,\n userMenu,\n onLogout,\n sticky = true,\n className,\n style,\n },\n ref\n ) => {\n const descriptionText = description ?? subtitle;\n const hasActions = Boolean(actions?.length || extra || user);\n\n const defaultUserItems: MenuProps[\"items\"] = [\n {\n key: \"profile\",\n label: user?.name,\n disabled: true,\n },\n ...(user?.role\n ? [{ key: \"role\", label: user.role, disabled: true }]\n : []),\n ...(onLogout\n ? [{ type: \"divider\" as const }, { key: \"logout\", label: \"Logout\", danger: true }]\n : []),\n ];\n\n const menu: MenuProps | undefined = user\n ? userMenu ?? {\n items: defaultUserItems,\n onClick: ({ key }) => {\n if (key === \"logout\") onLogout?.();\n },\n }\n : undefined;\n\n const breadcrumbItems = breadcrumbs?.map((item) => ({\n title:\n item.href || item.onClick ? (\n <a\n href={item.href ?? \"#\"}\n onClick={(event) => {\n if (!item.href) event.preventDefault();\n item.onClick?.();\n }}\n >\n {item.title}\n </a>\n ) : (\n item.title\n ),\n }));\n\n return (\n <header\n ref={ref}\n className={[\"cms-ds-header\", className].filter(Boolean).join(\" \")}\n style={{\n display: \"flex\",\n alignItems: \"flex-start\",\n justifyContent: \"space-between\",\n gap: spacing.lg,\n flexWrap: \"nowrap\",\n padding: `${spacing.lg}px ${spacing.xl}px`,\n background: colors.neutral.white,\n borderBottom: `1px solid ${colors.neutral.gray200}`,\n position: sticky ? \"sticky\" : undefined,\n top: sticky ? 0 : undefined,\n zIndex: sticky ? 20 : undefined,\n ...style,\n }}\n >\n <div\n style={{\n display: \"flex\",\n alignItems: \"flex-start\",\n gap: spacing.sm,\n flex: \"1 1 auto\",\n minWidth: 0,\n }}\n >\n {leading ? (\n <div\n style={{\n flexShrink: 0,\n display: \"flex\",\n alignItems: \"center\",\n paddingTop: 2,\n }}\n >\n {leading}\n </div>\n ) : null}\n\n <div style={{ flex: 1, minWidth: 0 }}>\n {breadcrumbItems && breadcrumbItems.length > 0 ? (\n <Breadcrumb\n items={breadcrumbItems}\n style={{\n fontSize: fontSize.xs,\n marginBottom: spacing.xs,\n }}\n />\n ) : null}\n {title ? (\n <Title\n level={3}\n ellipsis={{ tooltip: typeof title === \"string\" ? title : undefined }}\n style={{\n margin: 0,\n color: colors.neutral.gray900,\n fontSize: fontSize.xl,\n lineHeight: \"32px\",\n fontWeight: 600,\n }}\n >\n {title}\n </Title>\n ) : null}\n {descriptionText ? (\n <Text\n style={{\n display: \"block\",\n marginTop: spacing.xxs,\n color: colors.neutral.gray600,\n fontSize: fontSize.sm,\n lineHeight: \"22px\",\n maxWidth: 720,\n }}\n >\n {descriptionText}\n </Text>\n ) : null}\n </div>\n </div>\n\n {hasActions ? (\n <div\n className=\"cms-ds-header-actions\"\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-end\",\n gap: spacing.sm,\n flex: \"0 0 auto\",\n flexWrap: \"wrap\",\n paddingTop: title ? 2 : 0,\n }}\n >\n {extra}\n {actions?.map((action) => (\n <Button\n key={action.key}\n variant={action.variant ?? \"default\"}\n icon={action.icon}\n onClick={action.onClick}\n href={action.href}\n disabled={action.disabled}\n danger={action.danger}\n >\n {action.label}\n </Button>\n ))}\n {user && menu ? (\n <Dropdown menu={menu} trigger={[\"click\"]} placement=\"bottomRight\">\n <button\n type=\"button\"\n aria-label={user.name}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: spacing.xs,\n border: \"none\",\n background: \"transparent\",\n cursor: \"pointer\",\n padding: spacing.xxs,\n borderRadius: 999,\n flexShrink: 0,\n }}\n >\n <Avatar\n size={36}\n src={user.avatarSrc}\n alt={user.name}\n style={{\n backgroundColor: colors.brand.primary,\n color: colors.neutral.white,\n fontWeight: 600,\n fontSize: fontSize.xs,\n }}\n >\n {getInitials(user.name)}\n </Avatar>\n </button>\n </Dropdown>\n ) : null}\n </div>\n ) : null}\n\n <style>\n {`@media (max-width: ${breakpoints.md - 1}px) {\n .cms-ds-header { flex-wrap: wrap; }\n .cms-ds-header-actions { width: 100%; justify-content: flex-start; }\n }`}\n </style>\n </header>\n );\n }\n);\n\nHeader.displayName = \"Header\";\n","// Default Indus Action logo (data URL). Source PNG: ./IndusActionLogoFull.png\nexport const indusActionLogo: string =\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAACWCAYAAABkW7XSAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAEu2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSfvu78nIGlkPSdXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQnPz4KPHg6eG1wbWV0YSB4bWxuczp4PSdhZG9iZTpuczptZXRhLyc+CjxyZGY6UkRGIHhtbG5zOnJkZj0naHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyc+CgogPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9JycKICB4bWxuczpBdHRyaWI9J2h0dHA6Ly9ucy5hdHRyaWJ1dGlvbi5jb20vYWRzLzEuMC8nPgogIDxBdHRyaWI6QWRzPgogICA8cmRmOlNlcT4KICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0nUmVzb3VyY2UnPgogICAgIDxBdHRyaWI6Q3JlYXRlZD4yMDI1LTA0LTIzPC9BdHRyaWI6Q3JlYXRlZD4KICAgICA8QXR0cmliOkV4dElkPjYwYThkMzVlLTM2NDMtNDg2Ni05NjYxLWY4NTI2N2ZjNGEyNTwvQXR0cmliOkV4dElkPgogICAgIDxBdHRyaWI6RmJJZD41MjUyNjU5MTQxNzk1ODA8L0F0dHJpYjpGYklkPgogICAgIDxBdHRyaWI6VG91Y2hUeXBlPjI8L0F0dHJpYjpUb3VjaFR5cGU+CiAgICA8L3JkZjpsaT4KICAgPC9yZGY6U2VxPgogIDwvQXR0cmliOkFkcz4KIDwvcmRmOkRlc2NyaXB0aW9uPgoKIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PScnCiAgeG1sbnM6ZGM9J2h0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvJz4KICA8ZGM6dGl0bGU+CiAgIDxyZGY6QWx0PgogICAgPHJkZjpsaSB4bWw6bGFuZz0neC1kZWZhdWx0Jz5Mb2dvX1VwZGF0ZWQgLSAxPC9yZGY6bGk+CiAgIDwvcmRmOkFsdD4KICA8L2RjOnRpdGxlPgogPC9yZGY6RGVzY3JpcHRpb24+CgogPHJkZjpEZXNjcmlwdGlvbiBy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\";\n","import React from \"react\";\n\ntype IconProps = {\n size?: number;\n className?: string;\n style?: React.CSSProperties;\n};\n\nexport function LogoutIcon({ size = 14, className, style }: IconProps) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n className={className}\n style={style}\n >\n <path d=\"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4\" />\n <polyline points=\"16 17 21 12 16 7\" />\n <line x1=\"21\" y1=\"12\" x2=\"9\" y2=\"12\" />\n </svg>\n );\n}\n\nexport function CollapseIcon({\n collapsed,\n size = 14,\n className,\n style,\n}: IconProps & { collapsed?: boolean }) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n className={className}\n style={{\n transform: collapsed ? \"rotate(180deg)\" : undefined,\n ...style,\n }}\n >\n <polyline points=\"15 18 9 12 15 6\" />\n </svg>\n );\n}\n\nexport function MenuIcon({ size = 18, className, style }: IconProps) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n aria-hidden=\"true\"\n className={className}\n style={style}\n >\n <line x1=\"3\" y1=\"6\" x2=\"21\" y2=\"6\" />\n <line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\" />\n <line x1=\"3\" y1=\"18\" x2=\"21\" y2=\"18\" />\n </svg>\n );\n}\n\nexport function CloseIcon({ size = 14, className, style }: IconProps) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n aria-hidden=\"true\"\n className={className}\n style={style}\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n );\n}\n","import React, { useEffect, useState } from \"react\";\nimport type { ReactNode } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport {\n Avatar,\n Button,\n ConfigProvider,\n Drawer,\n Grid,\n Layout,\n Menu,\n Popconfirm,\n Typography,\n} from \"antd\";\nimport type { MenuProps, SiderProps } from \"antd\";\nimport { colors, spacing, fontSize, breakpoints } from \"../../theme\";\nimport { indusActionLogo as defaultLogo } from \"../../assets/indusActionLogo\";\nimport {\n LogoutIcon,\n CollapseIcon,\n MenuIcon,\n CloseIcon,\n} from \"../../assets/icons\";\n\nconst { Sider } = Layout;\n\nconst MOBILE_HEADER = spacing.xxl;\nconst LOGO_HEIGHT = spacing.xxl + spacing.md;\nconst LOGO_HEIGHT_COMPACT = spacing.lg;\n\nexport type SideNavItem = NonNullable<NonNullable<MenuProps[\"items\"]>[number]>;\n\nexport interface SideNavUser {\n name: string;\n role?: string;\n avatarSrc?: string;\n}\n\nexport interface SideNavProps extends Omit<SiderProps, \"children\" | \"breakpoint\"> {\n items?: MenuProps[\"items\"];\n menu?: Omit<MenuProps, \"items\" | \"mode\">;\n user?: SideNavUser | null;\n onLogout?: () => void;\n logoutLabel?: string;\n logoSrc?: string;\n logoAlt?: string;\n logo?: ReactNode;\n /**\n * Below this breakpoint the sider becomes a drawer (phone layout).\n * Set `false` to always keep the desktop sider.\n * @default \"md\"\n */\n breakpoint?: SiderProps[\"breakpoint\"] | false;\n /**\n * When false, skip the fixed mobile logo bar. Use when a parent header\n * already provides a menu trigger (for example AppShell).\n * @default true\n */\n showMobileBar?: boolean;\n /** Replace or hide (`null`) the default mobile menu button. */\n mobileTrigger?: ReactNode | null;\n mobileOpen?: boolean;\n onMobileOpenChange?: (open: boolean) => void;\n}\n\nfunction useBelowBreakpoint(breakpoint: SiderProps[\"breakpoint\"] | false) {\n const screens = Grid.useBreakpoint();\n if (!breakpoint) return false;\n if (Object.keys(screens).length === 0) {\n if (typeof window === \"undefined\") return false;\n return window.matchMedia(\n `(max-width: ${breakpoints[breakpoint] - 1}px)`\n ).matches;\n }\n return !screens[breakpoint];\n}\n\nfunction getInitials(name: string): string {\n const parts = name.trim().split(/\\s+/).filter(Boolean);\n if (parts.length === 0) return \"\";\n if (parts.length === 1) return parts[0].charAt(0).toUpperCase();\n return `${parts[0].charAt(0)}${parts[parts.length - 1].charAt(0)}`.toUpperCase();\n}\n\nfunction SideNavFooter({\n user,\n collapsed = false,\n onLogout,\n logoutLabel = \"Logout\",\n}: {\n user?: SideNavUser | null;\n collapsed?: boolean;\n onLogout?: () => void;\n logoutLabel?: string;\n}) {\n if (!user && !onLogout) return null;\n\n const initials = user ? getInitials(user.name) : \"\";\n\n const logoutButton = (\n <Button\n type=\"text\"\n size=\"small\"\n icon={<LogoutIcon />}\n aria-label={logoutLabel}\n style={{\n color: colors.brand.primary,\n width: 28,\n height: 28,\n padding: spacing.none,\n flexShrink: 0,\n }}\n />\n );\n\n return (\n <div\n style={{\n flexShrink: 0,\n borderTop: `1px solid ${colors.neutral.gray200}`,\n padding: collapsed ? spacing.sm : spacing.md,\n display: \"flex\",\n flexDirection: collapsed ? \"column\" : \"row\",\n alignItems: \"center\",\n gap: spacing.xs,\n background: colors.neutral.white,\n }}\n >\n {user ? (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: spacing.xs,\n justifyContent: collapsed ? \"center\" : \"flex-start\",\n minWidth: 0,\n flex: 1,\n }}\n >\n <Avatar\n size={28}\n src={user.avatarSrc}\n alt={user.name}\n style={{\n backgroundColor: colors.brand.primary,\n color: colors.neutral.white,\n fontWeight: 600,\n fontSize: fontSize.xs,\n flexShrink: 0,\n }}\n >\n {initials}\n </Avatar>\n {collapsed ? null : (\n <div style={{ minWidth: 0, flex: 1 }}>\n <Typography.Text\n strong\n ellipsis\n style={{\n display: \"block\",\n color: colors.neutral.gray800,\n fontSize: fontSize.sm,\n lineHeight: \"18px\",\n }}\n >\n {user.name}\n </Typography.Text>\n {user.role ? (\n <Typography.Text\n ellipsis\n style={{\n display: \"block\",\n color: colors.neutral.gray500,\n fontSize: fontSize.xxs,\n lineHeight: \"16px\",\n }}\n >\n {user.role}\n </Typography.Text>\n ) : null}\n </div>\n )}\n </div>\n ) : null}\n\n {onLogout ? (\n <Popconfirm\n title={logoutLabel}\n description=\"Are you sure you want to logout?\"\n okText=\"Yes\"\n cancelText=\"No\"\n onConfirm={onLogout}\n placement=\"top\"\n >\n {logoutButton}\n </Popconfirm>\n ) : null}\n </div>\n );\n}\n\nfunction SideNavPanel({\n collapsed,\n items,\n menuStyle,\n menuTheme,\n menuRest,\n user,\n onLogout,\n logoutLabel,\n logoSrc,\n logoAlt,\n logo,\n headerButton,\n}: {\n collapsed: boolean;\n items?: MenuProps[\"items\"];\n menuStyle?: React.CSSProperties;\n menuTheme?: MenuProps[\"theme\"];\n menuRest: Omit<MenuProps, \"items\" | \"mode\" | \"style\" | \"theme\">;\n user?: SideNavUser | null;\n onLogout?: () => void;\n logoutLabel?: string;\n logoSrc: string;\n logoAlt: string;\n logo?: ReactNode;\n headerButton?: ReactNode;\n}) {\n return (\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n height: \"100%\",\n minHeight: 0,\n background: colors.neutral.white,\n overflow: \"hidden\",\n }}\n >\n <div\n style={{\n flexShrink: 0,\n background: colors.neutral.white,\n display: \"flex\",\n flexDirection: collapsed ? \"column\" : \"row\",\n alignItems: \"center\",\n gap: spacing.xs,\n padding: collapsed ? spacing.sm : spacing.md,\n borderBottom: `1px solid ${colors.neutral.gray200}`,\n }}\n >\n <div\n style={{\n flex: 1,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: collapsed ? \"center\" : \"flex-start\",\n minWidth: 0,\n }}\n >\n {logo ?? (\n <img\n src={logoSrc}\n alt={logoAlt}\n style={{\n display: \"block\",\n width: \"auto\",\n maxWidth: \"100%\",\n height: collapsed ? LOGO_HEIGHT_COMPACT : LOGO_HEIGHT,\n maxHeight: collapsed ? LOGO_HEIGHT_COMPACT : LOGO_HEIGHT,\n objectFit: \"contain\",\n objectPosition: collapsed ? \"center\" : \"left center\",\n }}\n />\n )}\n </div>\n {headerButton}\n </div>\n\n <div\n style={{\n flex: \"1 1 0%\",\n minHeight: 0,\n overflow: \"auto\",\n }}\n >\n <ConfigProvider\n theme={{\n components: {\n Menu: {\n itemMarginInline: spacing.xxs,\n itemPaddingInline: spacing.md,\n },\n },\n }}\n >\n <Menu\n mode=\"inline\"\n inlineIndent={spacing.sm}\n theme={menuTheme}\n items={items}\n style={{\n borderInlineEnd: \"none\",\n paddingBlock: spacing.sm,\n ...menuStyle,\n }}\n {...menuRest}\n />\n </ConfigProvider>\n </div>\n\n <SideNavFooter\n user={user}\n collapsed={collapsed}\n onLogout={onLogout}\n logoutLabel={logoutLabel}\n />\n </div>\n );\n}\n\nexport function SideNav({\n items,\n menu,\n user,\n onLogout,\n logoutLabel,\n logoSrc = defaultLogo,\n logoAlt = \"Indus Action\",\n logo,\n width = 256,\n theme = \"light\",\n collapsed: collapsedProp,\n defaultCollapsed,\n onCollapse,\n collapsible,\n trigger,\n style,\n breakpoint = \"md\",\n showMobileBar = true,\n mobileTrigger,\n mobileOpen: mobileOpenProp,\n onMobileOpenChange,\n ...siderProps\n}: SideNavProps) {\n const isMobile = useBelowBreakpoint(breakpoint);\n const [uncontrolledCollapsed, setUncontrolledCollapsed] = useState(\n defaultCollapsed ?? false\n );\n const [uncontrolledMobileOpen, setUncontrolledMobileOpen] = useState(false);\n\n const isCollapsedControlled = collapsedProp !== undefined;\n const collapsed = isCollapsedControlled\n ? collapsedProp\n : uncontrolledCollapsed;\n\n const isMobileOpenControlled = mobileOpenProp !== undefined;\n const mobileOpen = isMobileOpenControlled\n ? mobileOpenProp\n : uncontrolledMobileOpen;\n\n const setMobileOpen = (open: boolean) => {\n if (!isMobileOpenControlled) setUncontrolledMobileOpen(open);\n onMobileOpenChange?.(open);\n };\n\n const handleCollapse: SiderProps[\"onCollapse\"] = (value, type) => {\n if (!isCollapsedControlled) setUncontrolledCollapsed(value);\n onCollapse?.(value, type);\n };\n\n useEffect(() => {\n if (!isMobile) setMobileOpen(false);\n }, [isMobile]);\n\n useEffect(() => {\n if (!isMobile || !showMobileBar) return;\n const previous = document.body.style.paddingTop;\n document.body.style.paddingTop = `${MOBILE_HEADER}px`;\n return () => {\n document.body.style.paddingTop = previous;\n };\n }, [isMobile, showMobileBar]);\n\n const {\n style: menuStyle,\n theme: menuTheme,\n onClick: menuOnClick,\n ...menuRest\n } = menu ?? {};\n\n const handleMenuClick: MenuProps[\"onClick\"] = (info) => {\n menuOnClick?.(info);\n if (isMobile) setMobileOpen(false);\n };\n\n const useHeaderToggle = Boolean(collapsible) && trigger === undefined;\n const panelTheme = menuTheme ?? theme;\n\n const iconButtonStyle: React.CSSProperties = {\n color: colors.brand.primary,\n width: 28,\n height: 28,\n padding: spacing.none,\n flexShrink: 0,\n };\n\n const panel = (\n headerButton: ReactNode,\n panelCollapsed: boolean\n ) => (\n <SideNavPanel\n collapsed={panelCollapsed}\n items={items}\n menuStyle={menuStyle}\n menuTheme={panelTheme}\n menuRest={{ ...menuRest, onClick: handleMenuClick }}\n user={user}\n onLogout={onLogout}\n logoutLabel={logoutLabel}\n logoSrc={logoSrc}\n logoAlt={logoAlt}\n logo={logo}\n headerButton={headerButton}\n />\n );\n\n if (isMobile) {\n const hamburger =\n showMobileBar && mobileTrigger !== null\n ? (mobileTrigger ?? (\n <Button\n type=\"text\"\n aria-label=\"Open navigation\"\n icon={<MenuIcon />}\n onClick={() => setMobileOpen(true)}\n style={iconButtonStyle}\n />\n ))\n : null;\n\n return (\n <>\n {showMobileBar\n ? createPortal(\n <header\n style={{\n position: \"fixed\",\n top: 0,\n left: 0,\n right: 0,\n height: MOBILE_HEADER,\n zIndex: 1000,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: spacing.xs,\n paddingInline: spacing.md,\n borderBottom: `1px solid ${colors.neutral.gray200}`,\n background: colors.neutral.white,\n }}\n >\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n minWidth: 0,\n flex: 1,\n }}\n >\n {logo ?? (\n <img\n src={logoSrc}\n alt={logoAlt}\n style={{\n display: \"block\",\n height: LOGO_HEIGHT_COMPACT,\n width: \"auto\",\n maxWidth: \"100%\",\n objectFit: \"contain\",\n objectPosition: \"left center\",\n }}\n />\n )}\n </div>\n {hamburger}\n </header>,\n document.body\n )\n : null}\n <Drawer\n placement=\"left\"\n open={mobileOpen}\n onClose={() => setMobileOpen(false)}\n width={width}\n closable={false}\n zIndex={1100}\n styles={{\n body: {\n padding: 0,\n height: \"100%\",\n display: \"flex\",\n flexDirection: \"column\",\n },\n }}\n >\n {panel(\n <Button\n type=\"text\"\n size=\"small\"\n aria-label=\"Close navigation\"\n icon={<CloseIcon />}\n onClick={() => setMobileOpen(false)}\n style={iconButtonStyle}\n />,\n false\n )}\n </Drawer>\n </>\n );\n }\n\n return (\n <Sider\n theme={theme}\n width={width}\n collapsed={collapsed}\n collapsible={collapsible}\n trigger={useHeaderToggle ? null : trigger}\n onCollapse={handleCollapse}\n style={{\n height: \"100vh\",\n position: \"sticky\",\n top: 0,\n overflow: \"hidden\",\n borderRight: `1px solid ${colors.neutral.gray200}`,\n background: colors.neutral.white,\n ...style,\n }}\n {...siderProps}\n >\n {panel(\n useHeaderToggle ? (\n <Button\n type=\"text\"\n size=\"small\"\n aria-label={collapsed ? \"Expand navigation\" : \"Collapse navigation\"}\n icon={<CollapseIcon collapsed={collapsed} />}\n onClick={() => handleCollapse(!collapsed, \"clickTrigger\")}\n style={iconButtonStyle}\n />\n ) : null,\n collapsed\n )}\n </Sider>\n );\n}\n\nSideNav.displayName = \"SideNav\";\n\nexport default SideNav;\nexport { defaultLogo as indusActionLogo };\n","import React from \"react\";\nimport { Result } from \"antd\";\nimport type { ResultProps } from \"antd\";\nimport { Button } from \"../Button\";\nimport { colors } from \"../../theme\";\n\nexport type StatusPageStatus = NonNullable<ResultProps[\"status\"]>;\n\nexport interface StatusPageProps {\n status: StatusPageStatus;\n title?: React.ReactNode;\n subTitle?: React.ReactNode;\n actionLabel?: string;\n /** Click handler for the default action button. */\n onAction?: () => void;\n /** If set, the default action button renders as a link. */\n actionHref?: string;\n /** Replaces the default action button. */\n extra?: React.ReactNode;\n /** Fill the viewport and center the result. Default: true. */\n fullPage?: boolean;\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport function StatusPage({\n status,\n title,\n subTitle,\n actionLabel,\n onAction,\n actionHref,\n extra,\n fullPage = true,\n className,\n style,\n}: StatusPageProps) {\n const action =\n extra ??\n (actionLabel ? (\n <Button\n variant=\"primary\"\n size=\"large\"\n {...(actionHref ? { href: actionHref } : {})}\n onClick={onAction}\n >\n {actionLabel}\n </Button>\n ) : undefined);\n\n const result = (\n <Result\n status={status}\n title={title}\n subTitle={subTitle}\n extra={action}\n />\n );\n\n if (!fullPage) {\n return (\n <div className={className} style={style}>\n {result}\n </div>\n );\n }\n\n return (\n <div\n className={className}\n style={{\n minHeight: \"100vh\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n background: colors.neutral.gray50,\n ...style,\n }}\n >\n {result}\n </div>\n );\n}\n\nStatusPage.displayName = \"StatusPage\";\n","import React from \"react\";\nimport { StatusPage } from \"./StatusPage\";\nimport type { StatusPageProps } from \"./StatusPage\";\n\nexport type NotFoundPageProps = Omit<StatusPageProps, \"status\">;\n\nexport function NotFoundPage({\n title = \"404\",\n subTitle = \"Sorry, the page you visited does not exist.\",\n actionLabel = \"Home Page\",\n actionHref,\n onAction,\n extra,\n ...rest\n}: NotFoundPageProps) {\n const href = actionHref ?? (onAction || extra ? undefined : \"/\");\n\n return (\n <StatusPage\n status=\"404\"\n title={title}\n subTitle={subTitle}\n actionLabel={actionLabel}\n actionHref={href}\n onAction={onAction}\n extra={extra}\n {...rest}\n />\n );\n}\n\nNotFoundPage.displayName = \"NotFoundPage\";\n\nexport default NotFoundPage;\n","import React from \"react\";\nimport { StatusPage } from \"./StatusPage\";\nimport type { StatusPageProps } from \"./StatusPage\";\n\nexport type UnauthorizedPageProps = Omit<StatusPageProps, \"status\">;\n\nexport function UnauthorizedPage({\n title = \"Unauthorized Access\",\n subTitle = \"You don't have permission to access this. Please ask the site admin for access.\",\n actionLabel = \"Back\",\n actionHref,\n onAction,\n extra,\n ...rest\n}: UnauthorizedPageProps) {\n const href = actionHref ?? (onAction || extra ? undefined : \"/\");\n\n return (\n <StatusPage\n status=\"403\"\n title={title}\n subTitle={subTitle}\n actionLabel={actionLabel}\n actionHref={href}\n onAction={onAction}\n extra={extra}\n {...rest}\n />\n );\n}\n\nUnauthorizedPage.displayName = \"UnauthorizedPage\";\n\nexport default UnauthorizedPage;\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/Button/Button.tsx","../src/theme.ts","../src/components/Tabs/Tabs.tsx","../src/components/Dropdown/Dropdown.tsx","../src/components/Skeleton/Skeleton.tsx","../src/components/Table/Table.tsx","../src/components/Tag/Tag.tsx","../src/components/Link/Link.tsx","../src/components/Card/Card.tsx","../src/components/MetricCard/MetricCard.tsx","../src/components/ColumnGraph/ColumnGraph.tsx","../src/components/BarGraph/BarGraph.tsx","../src/components/DonutChart/DonutChart.tsx","../src/components/TimeSeriesGraph/TimeSeriesGraph.tsx","../src/components/BulletGraph/BulletGraph.tsx","../src/components/Histogram/Histogram.tsx","../src/components/Modal/Modal.tsx","../src/components/Header/Header.tsx","../src/assets/indusActionLogo.ts","../src/assets/icons.tsx","../src/components/SideNav/SideNav.tsx","../src/components/StatusPage/StatusPage.tsx","../src/components/StatusPage/NotFoundPage.tsx","../src/components/StatusPage/UnauthorizedPage.tsx","../src/components/Notifications/NotificationProvider.tsx"],"names":["React","Button","jsx","AntButton","antdTheme","ConfigProvider","AntTabs","AntDropdown","jsxs","AntSkeleton","useState","useEffect","useRef","useCallback","useMemo","Input","Pagination","AntTable","Tag","AntTag","Typography","Link","AntCard","Statistic","Fragment","defaultPalette","maxVal","AntModal","Breadcrumb","Avatar","Layout","Grid","getInitials","Popconfirm","Menu","theme","createPortal","Drawer","Result","InlineAlert","AntAlert","createContext","useContext","message","notification"],"mappings":"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","file":"index.cjs","sourcesContent":["import React from \"react\";\nimport { Button as AntButton } from \"antd\";\nimport type { ButtonProps as AntButtonProps } from \"antd\";\n\nexport type ButtonVariant = \"primary\" | \"default\" | \"dashed\" | \"link\" | \"text\";\nexport type ButtonSize = \"large\" | \"middle\" | \"small\";\n\nexport interface ButtonProps\n extends Omit<AntButtonProps, \"type\" | \"variant\" | \"size\" | \"children\"> {\n variant?: ButtonVariant;\n size?: ButtonSize;\n children?: React.ReactNode;\n}\n\nexport const Button = React.forwardRef(function Button(\n { variant = \"default\", size = \"middle\", children, ...rest }: ButtonProps,\n ref: React.Ref<HTMLButtonElement>\n) {\n return (\n <AntButton ref={ref} type={variant} size={size} {...rest}>\n {children}\n </AntButton>\n );\n});\n\nButton.displayName = \"Button\";\n\nexport default Button;\n","import React from \"react\";\nimport { ConfigProvider } from \"antd\";\nimport type { ThemeConfig } from \"antd\";\nimport { theme as antdTheme } from \"antd\";\n\nexport const colors = {\n brand: {\n primary: \"#596993\",\n primaryHover: \"#6B7BA5\",\n primaryActive: \"#4A587C\",\n primaryLight: \"#E8EBF2\",\n accent: \"#F69120\",\n },\n neutral: {\n white: \"#FFFFFF\",\n black: \"#000000\",\n gray50: \"#FAFAFA\",\n gray100: \"#F5F5F5\",\n gray200: \"#E8E8E8\",\n gray300: \"#D9D9D9\",\n gray400: \"#BFBFBF\",\n gray500: \"#8C8C8C\",\n gray600: \"#595959\",\n gray700: \"#434343\",\n gray800: \"#262626\",\n gray900: \"#1F1F1F\",\n },\n semantic: {\n success: \"#52C41A\",\n warning: \"#FAAD14\",\n error: \"#FF4D4F\",\n info: \"#596993\",\n },\n} as const;\n\nexport const spacing = {\n none: 0,\n xxs: 4,\n xs: 8,\n sm: 12,\n md: 16,\n lg: 24,\n xl: 32,\n xxl: 48,\n} as const;\n\nexport const fontSize = {\n xxs: 11,\n xs: 12,\n sm: 14,\n md: 16,\n lg: 20,\n xl: 24,\n xxl: 30,\n} as const;\n\n/** Viewport min-widths. Matches Ant Design's `Grid` / `Sider` breakpoint names. */\nexport const breakpoints = {\n xs: 480,\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1200,\n xxl: 1600,\n} as const;\n\nexport type Colors = typeof colors;\nexport type Spacing = typeof spacing;\nexport type FontSize = typeof fontSize;\nexport type Breakpoints = typeof breakpoints;\n\n/**\n * Seed + map tokens only. Ant Design's algorithm applies these to Button,\n * Menu, Layout, and every other component — no per-component lists.\n */\nexport const theme: ThemeConfig = {\n algorithm: antdTheme.defaultAlgorithm,\n token: {\n colorPrimary: colors.brand.primary,\n colorPrimaryHover: colors.brand.primaryHover,\n colorPrimaryActive: colors.brand.primaryActive,\n colorPrimaryBg: colors.brand.primaryLight,\n colorLink: colors.brand.primary,\n colorInfo: colors.semantic.info,\n colorSuccess: colors.semantic.success,\n colorWarning: colors.semantic.warning,\n colorError: colors.semantic.error,\n paddingXXS: spacing.xxs,\n paddingXS: spacing.xs,\n paddingSM: spacing.sm,\n padding: spacing.md,\n paddingMD: spacing.md,\n paddingLG: spacing.lg,\n paddingXL: spacing.xl,\n marginXXS: spacing.xxs,\n marginXS: spacing.xs,\n marginSM: spacing.sm,\n margin: spacing.md,\n marginMD: spacing.md,\n marginLG: spacing.lg,\n marginXL: spacing.xl,\n marginXXL: spacing.xxl,\n fontSizeSM: fontSize.xs,\n fontSize: fontSize.sm,\n fontSizeLG: fontSize.md,\n fontSizeXL: fontSize.lg,\n fontSizeHeading5: fontSize.md,\n fontSizeHeading4: fontSize.lg,\n fontSizeHeading3: fontSize.xl,\n fontSizeHeading2: fontSize.xxl,\n screenXS: breakpoints.xs,\n screenSM: breakpoints.sm,\n screenMD: breakpoints.md,\n screenLG: breakpoints.lg,\n screenXL: breakpoints.xl,\n screenXXL: breakpoints.xxl,\n },\n};\n\nexport interface ThemeProviderProps {\n children: React.ReactNode;\n}\n\nexport function ThemeProvider({ children }: ThemeProviderProps) {\n return React.createElement(ConfigProvider, { theme }, children);\n}\n","import React from \"react\";\nimport { Tabs as AntTabs, ConfigProvider } from \"antd\";\nimport type { TabsProps as AntTabsProps, TabPaneProps } from \"antd\";\nimport { fontSize } from \"../../theme\";\n\nexport type { TabPaneProps };\n\nexport interface TabsProps extends Omit<AntTabsProps, \"type\"> {\n type?: \"line\" | \"card\";\n}\n\nexport const Tabs: React.FC<TabsProps> = ({ type = \"line\", ...rest }) => {\n return (\n <ConfigProvider\n theme={{\n components: {\n Tabs: {\n titleFontSizeSM: fontSize.sm,\n titleFontSize: fontSize.md,\n titleFontSizeLG: fontSize.lg,\n },\n },\n }}\n >\n <AntTabs type={type} {...rest} />\n </ConfigProvider>\n );\n};\n\nTabs.displayName = \"Tabs\";\n\nexport default Tabs;\n","import React from \"react\";\nimport { Dropdown as AntDropdown, ConfigProvider } from \"antd\";\nimport type {\n DropdownProps as AntDropdownProps,\n MenuProps,\n} from \"antd\";\nimport type { DropdownButtonProps as AntDropdownButtonProps } from \"antd/es/dropdown\";\nimport { spacing } from \"../../theme\";\n\nexport type { MenuProps };\n\nexport interface DropdownProps extends AntDropdownProps {\n children?: React.ReactNode;\n}\n\nexport interface DropdownButtonProps extends AntDropdownButtonProps {\n children?: React.ReactNode;\n}\n\nconst DropdownButton: React.FC<DropdownButtonProps> = ({\n children,\n ...rest\n}) => {\n return (\n <ConfigProvider\n theme={{\n components: {\n Dropdown: {\n paddingXXS: spacing.xxs,\n paddingXS: spacing.xs,\n },\n },\n }}\n >\n <AntDropdown.Button {...rest}>{children}</AntDropdown.Button>\n </ConfigProvider>\n );\n};\nDropdownButton.displayName = \"Dropdown.Button\";\n\nexport interface DropdownInterface extends React.FC<DropdownProps> {\n Button: typeof DropdownButton;\n}\n\nexport const Dropdown: DropdownInterface = ({ children, ...rest }: DropdownProps) => {\n return (\n <ConfigProvider\n theme={{\n components: {\n Dropdown: {\n paddingXXS: spacing.xxs,\n paddingXS: spacing.xs,\n },\n },\n }}\n >\n <AntDropdown {...rest}>{children}</AntDropdown>\n </ConfigProvider>\n );\n};\n\nDropdown.Button = DropdownButton;\nDropdown.displayName = \"Dropdown\";\n\nexport default Dropdown;\n","import React from \"react\";\nimport { Skeleton as AntSkeleton } from \"antd\";\nimport type { SkeletonProps as AntSkeletonProps } from \"antd\";\nimport { spacing } from \"../../theme\";\n\nexport type SkeletonProps = AntSkeletonProps;\n\nexport interface DetailsSkeletonProps {\n /** Number of label/value placeholder rows. Default: 5 */\n rows?: number;\n /** Show an avatar + title block above the fields. */\n avatar?: boolean;\n}\n\nfunction DetailsSkeleton({ rows = 5, avatar = false }: DetailsSkeletonProps) {\n return (\n <div aria-busy=\"true\" aria-live=\"polite\">\n {avatar ? (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: spacing.md,\n marginBottom: spacing.lg,\n }}\n >\n <AntSkeleton.Avatar active size={48} />\n <div style={{ flex: 1, minWidth: 0 }}>\n <AntSkeleton.Input\n active\n size=\"small\"\n style={{ width: 180, maxWidth: \"70%\", height: 16, marginBottom: spacing.xs }}\n />\n <AntSkeleton.Input\n active\n size=\"small\"\n style={{ width: 120, maxWidth: \"50%\", height: 12 }}\n />\n </div>\n </div>\n ) : null}\n {Array.from({ length: rows }, (_, index) => (\n <div\n key={index}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: spacing.lg,\n marginBottom: spacing.md,\n }}\n >\n <AntSkeleton.Input\n active\n size=\"small\"\n style={{ width: 88, height: 12, flex: \"0 0 88px\" }}\n />\n <AntSkeleton.Input\n active\n size=\"small\"\n style={{\n width: `${58 + (index % 3) * 14}%`,\n maxWidth: 280,\n height: 14,\n minWidth: 0,\n flex: 1,\n }}\n />\n </div>\n ))}\n </div>\n );\n}\n\nDetailsSkeleton.displayName = \"Skeleton.Details\";\n\nexport interface SkeletonInterface extends React.FC<SkeletonProps> {\n Button: typeof AntSkeleton.Button;\n Avatar: typeof AntSkeleton.Avatar;\n Input: typeof AntSkeleton.Input;\n Image: typeof AntSkeleton.Image;\n Node: typeof AntSkeleton.Node;\n Details: typeof DetailsSkeleton;\n}\n\nexport const Skeleton: SkeletonInterface = ({ active = true, ...rest }) => {\n return <AntSkeleton active={active} {...rest} />;\n};\n\nSkeleton.Button = AntSkeleton.Button;\nSkeleton.Avatar = AntSkeleton.Avatar;\nSkeleton.Input = AntSkeleton.Input;\nSkeleton.Image = AntSkeleton.Image;\nSkeleton.Node = AntSkeleton.Node;\nSkeleton.Details = DetailsSkeleton;\nSkeleton.displayName = \"Skeleton\";\n\nexport default Skeleton;\n","import React, { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { Table as AntTable, Input, Pagination, ConfigProvider } from \"antd\";\nimport type { TablePaginationConfig } from \"antd\";\nimport type {\n ColumnGroupType,\n ColumnType,\n TableProps as AntTableProps,\n} from \"antd/es/table\";\nimport type {\n FilterValue,\n SorterResult,\n TableCurrentDataSource,\n} from \"antd/es/table/interface\";\nimport { colors, spacing, breakpoints } from \"../../theme\";\nimport { Skeleton } from \"../Skeleton\";\n\nexport type TableMode = \"client\" | \"server\";\nexport type TableSortOrder = \"ascend\" | \"descend\" | null;\n\nexport type TableQuery = {\n search: string;\n page: number;\n pageSize: number;\n sortField?: React.Key | readonly React.Key[];\n sortOrder?: TableSortOrder;\n filters: Record<string, FilterValue | null>;\n};\n\nexport type TableSearchConfig = {\n placeholder?: string;\n value?: string;\n defaultValue?: string;\n onChange?: (value: string) => void;\n debounceMs?: number;\n};\n\nexport type TableColumnType<T> = ColumnType<T> & {\n /** Include this column in free-text search. Default: true when `dataIndex` is set. */\n searchable?: boolean;\n};\n\nexport type TableColumnGroupType<T> = Omit<ColumnGroupType<T>, \"children\"> & {\n children: TableColumnsType<T>;\n};\n\nexport type TableColumnsType<T> = (TableColumnGroupType<T> | TableColumnType<T>)[];\n\nexport interface TableProps<T extends object>\n extends Omit<AntTableProps<T>, \"columns\" | \"onChange\" | \"pagination\"> {\n columns?: TableColumnsType<T>;\n /**\n * `client` (default): search, filters, sort, and pagination run on `dataSource`.\n * `server`: `dataSource` is the current page only. Pass `pagination.total` from the\n * API and handle `onQueryChange` to fetch the next page / search / sort / filters.\n */\n mode?: TableMode;\n /** Free-text search, shown on the same row as pagination above the table. Pass `false` to hide it. */\n search?: boolean | TableSearchConfig;\n pagination?: false | TablePaginationConfig;\n onChange?: (\n pagination: TablePaginationConfig,\n filters: Record<string, FilterValue | null>,\n sorter: SorterResult<T> | SorterResult<T>[],\n extra: TableCurrentDataSource<T>\n ) => void;\n /** Fires whenever search, page, page size, sort, or column filters change. */\n onQueryChange?: (query: TableQuery) => void;\n}\n\nconst DEFAULT_PAGE_SIZE = 10;\n\nfunction isColumnGroup<T>(\n column: TableColumnGroupType<T> | TableColumnType<T>\n): column is TableColumnGroupType<T> {\n return \"children\" in column && Array.isArray(column.children);\n}\n\nfunction getByDataIndex<T extends object>(\n record: T,\n dataIndex: ColumnType<T>[\"dataIndex\"]\n): unknown {\n if (dataIndex == null) return undefined;\n const path = Array.isArray(dataIndex) ? dataIndex : [dataIndex];\n let current: unknown = record;\n for (const key of path) {\n if (current == null || typeof current !== \"object\") return undefined;\n current = (current as Record<string | number, unknown>)[key as string | number];\n }\n return current;\n}\n\nfunction compareValues(a: unknown, b: unknown): number {\n if (a == null && b == null) return 0;\n if (a == null) return -1;\n if (b == null) return 1;\n if (typeof a === \"number\" && typeof b === \"number\") return a - b;\n return String(a).localeCompare(String(b), undefined, {\n numeric: true,\n sensitivity: \"base\",\n });\n}\n\nfunction flattenColumns<T>(columns: TableColumnsType<T>): TableColumnType<T>[] {\n const result: TableColumnType<T>[] = [];\n for (const column of columns) {\n if (isColumnGroup(column)) {\n result.push(...flattenColumns(column.children));\n } else {\n result.push(column);\n }\n }\n return result;\n}\n\nfunction matchesSearch<T extends object>(\n record: T,\n search: string,\n columns: TableColumnsType<T>\n): boolean {\n const query = search.trim().toLowerCase();\n if (!query) return true;\n\n const leaves = flattenColumns(columns);\n const optedIn = leaves.filter((column) => column.searchable === true);\n const pool = optedIn.length > 0 ? optedIn : leaves.filter((column) => column.searchable !== false);\n\n return pool.some((column) => {\n const value = getByDataIndex(record, column.dataIndex);\n if (value == null) return false;\n return String(value).toLowerCase().includes(query);\n });\n}\n\nfunction defaultCompare<T extends object>(dataIndex: ColumnType<T>[\"dataIndex\"]) {\n return (a: T, b: T) => compareValues(getByDataIndex(a, dataIndex), getByDataIndex(b, dataIndex));\n}\n\nfunction enhanceColumnsForClient<T extends object>(\n columns: TableColumnsType<T>\n): TableColumnsType<T> {\n return columns.map((column) => {\n if (isColumnGroup(column)) {\n return { ...column, children: enhanceColumnsForClient(column.children) };\n }\n\n const next: TableColumnType<T> = { ...column };\n\n if (next.sorter === true && next.dataIndex != null) {\n next.sorter = defaultCompare(next.dataIndex);\n }\n\n if (next.filters && !next.onFilter && next.dataIndex != null) {\n next.onFilter = (value, record) =>\n String(getByDataIndex(record, next.dataIndex)) === String(value);\n }\n\n return next;\n });\n}\n\nfunction adaptColumnsForServer<T extends object>(\n columns: TableColumnsType<T>\n): TableColumnsType<T> {\n return columns.map((column) => {\n if (isColumnGroup(column)) {\n return { ...column, children: adaptColumnsForServer(column.children) };\n }\n\n const next: TableColumnType<T> = { ...column };\n\n if (typeof next.sorter === \"function\") {\n next.sorter = true;\n } else if (next.sorter && typeof next.sorter === \"object\" && \"compare\" in next.sorter) {\n const { compare: _compare, ...rest } = next.sorter;\n next.sorter = Object.keys(rest).length > 0 ? rest : true;\n }\n\n if (next.onFilter) {\n delete next.onFilter;\n }\n\n return next;\n });\n}\n\nconst SKELETON_WIDTHS = [72, 88, 64, 80, 56];\n\nfunction skeletonizeColumns<T extends object>(\n columns: TableColumnsType<T>\n): TableColumnsType<T> {\n return columns.map((column, index) => {\n if (isColumnGroup(column)) {\n return { ...column, children: skeletonizeColumns(column.children) };\n }\n\n const widthPct = SKELETON_WIDTHS[index % SKELETON_WIDTHS.length];\n return {\n ...column,\n sorter: false,\n filters: undefined,\n onFilter: undefined,\n filterDropdown: undefined,\n render: () => (\n <Skeleton.Input\n active\n size=\"small\"\n style={{ width: `${widthPct}%`, height: 14, minWidth: 40 }}\n />\n ),\n };\n });\n}\n\nfunction isTableLoading(loading: AntTableProps[\"loading\"]): boolean {\n if (loading == null) return false;\n if (typeof loading === \"boolean\") return loading;\n return loading.spinning !== false;\n}\n\nfunction firstSorter<T>(\n sorter: SorterResult<T> | SorterResult<T>[]\n): SorterResult<T> | undefined {\n return Array.isArray(sorter) ? sorter[0] : sorter;\n}\n\nfunction getTableLayout() {\n if (typeof window === \"undefined\") {\n return { isPhone: false, isTablet: false };\n }\n const width = window.innerWidth;\n return {\n isPhone: width < breakpoints.md,\n isTablet: width >= breakpoints.md && width < breakpoints.lg,\n };\n}\n\nfunction useTableLayout() {\n const [layout, setLayout] = useState(getTableLayout);\n\n useEffect(() => {\n const phoneQuery = window.matchMedia(`(max-width: ${breakpoints.md - 1}px)`);\n const tabletQuery = window.matchMedia(\n `(min-width: ${breakpoints.md}px) and (max-width: ${breakpoints.lg - 1}px)`\n );\n\n const update = () => setLayout(getTableLayout());\n update();\n phoneQuery.addEventListener(\"change\", update);\n tabletQuery.addEventListener(\"change\", update);\n return () => {\n phoneQuery.removeEventListener(\"change\", update);\n tabletQuery.removeEventListener(\"change\", update);\n };\n }, []);\n\n return layout;\n}\n\nfunction resolveSearchConfig(\n search: TableProps<object>[\"search\"],\n mode: TableMode\n): (TableSearchConfig & { enabled: boolean }) | { enabled: false } {\n if (search === false) return { enabled: false };\n const config = search === true || search == null ? {} : search;\n return {\n enabled: true,\n placeholder: \"Search\",\n debounceMs: mode === \"server\" ? 300 : 0,\n ...config,\n };\n}\n\nexport function Table<T extends object>({\n columns = [],\n dataSource,\n mode = \"client\",\n search = true,\n pagination,\n onChange,\n onQueryChange,\n scroll,\n size,\n loading = false,\n rowKey,\n ...rest\n}: TableProps<T>) {\n const { isPhone, isTablet } = useTableLayout();\n const paginationObj = pagination === false ? undefined : pagination;\n const searchConfig = resolveSearchConfig(search, mode);\n\n const [query, setQuery] = useState<TableQuery>(() => ({\n search:\n (searchConfig.enabled && (searchConfig.value ?? searchConfig.defaultValue)) || \"\",\n page: paginationObj?.current ?? 1,\n pageSize: paginationObj?.pageSize ?? DEFAULT_PAGE_SIZE,\n filters: {},\n sortOrder: null,\n }));\n const [inputSearch, setInputSearch] = useState(query.search);\n const [clientFilteredCount, setClientFilteredCount] = useState<number | null>(null);\n\n const queryRef = useRef(query);\n queryRef.current = query;\n\n const onQueryChangeRef = useRef(onQueryChange);\n onQueryChangeRef.current = onQueryChange;\n\n const searchOnChangeRef = useRef(\n searchConfig.enabled ? searchConfig.onChange : undefined\n );\n searchOnChangeRef.current = searchConfig.enabled ? searchConfig.onChange : undefined;\n\n const debounceMs = searchConfig.enabled ? searchConfig.debounceMs ?? 0 : 0;\n const debounceTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n const controlledSearch = searchConfig.enabled ? searchConfig.value : undefined;\n\n useEffect(() => {\n if (controlledSearch === undefined) return;\n setInputSearch(controlledSearch);\n setQuery((prev) =>\n prev.search === controlledSearch ? prev : { ...prev, search: controlledSearch }\n );\n }, [controlledSearch]);\n\n useEffect(() => {\n if (paginationObj?.current != null) {\n setQuery((prev) =>\n prev.page === paginationObj.current ? prev : { ...prev, page: paginationObj.current! }\n );\n }\n }, [paginationObj?.current]);\n\n useEffect(() => {\n if (paginationObj?.pageSize != null) {\n setQuery((prev) =>\n prev.pageSize === paginationObj.pageSize\n ? prev\n : { ...prev, pageSize: paginationObj.pageSize! }\n );\n }\n }, [paginationObj?.pageSize]);\n\n useEffect(() => {\n return () => {\n if (debounceTimer.current) clearTimeout(debounceTimer.current);\n };\n }, []);\n\n const resolvedQuery: TableQuery = {\n ...query,\n search: controlledSearch ?? query.search,\n page: paginationObj?.current ?? query.page,\n pageSize: paginationObj?.pageSize ?? query.pageSize,\n };\n\n const emitQuery = useCallback((next: TableQuery) => {\n setQuery(next);\n queryRef.current = next;\n onQueryChangeRef.current?.(next);\n }, []);\n\n const commitSearch = useCallback(\n (value: string, immediate = false) => {\n const run = () => {\n searchOnChangeRef.current?.(value);\n emitQuery({ ...queryRef.current, search: value, page: 1 });\n };\n\n if (debounceTimer.current) {\n clearTimeout(debounceTimer.current);\n debounceTimer.current = null;\n }\n\n if (immediate || debounceMs <= 0) {\n run();\n return;\n }\n\n debounceTimer.current = setTimeout(run, debounceMs);\n },\n [debounceMs, emitQuery]\n );\n\n const rows = useMemo(() => {\n const source = (dataSource ?? []) as T[];\n if (mode === \"server\" || !searchConfig.enabled) return source;\n return source.filter((record) => matchesSearch(record, resolvedQuery.search, columns));\n }, [columns, dataSource, mode, resolvedQuery.search, searchConfig.enabled]);\n\n useEffect(() => {\n setClientFilteredCount(null);\n }, [resolvedQuery.search, dataSource]);\n\n const resolvedColumns = useMemo(\n () =>\n mode === \"server\"\n ? adaptColumnsForServer(columns)\n : enhanceColumnsForClient(columns),\n [columns, mode]\n );\n\n const tableLoading = isTableLoading(loading);\n const skeletonRowCount = resolvedQuery.pageSize || DEFAULT_PAGE_SIZE;\n\n const displayColumns = useMemo(\n () => (tableLoading ? skeletonizeColumns(resolvedColumns) : resolvedColumns),\n [resolvedColumns, tableLoading]\n );\n\n const displayRows = useMemo(() => {\n if (!tableLoading) return rows;\n return Array.from({ length: skeletonRowCount }, (_, index) => ({\n __skeletonKey: `skeleton-${index}`,\n })) as unknown as T[];\n }, [rows, skeletonRowCount, tableLoading]);\n\n const displayRowKey: AntTableProps<T>[\"rowKey\"] = tableLoading\n ? (record) => String((record as { __skeletonKey?: string }).__skeletonKey)\n : rowKey;\n\n const paginationTotal =\n mode === \"server\"\n ? paginationObj?.total ?? rows.length\n : clientFilteredCount ?? rows.length;\n\n const resolvedPagination = useMemo(() => {\n if (pagination === false) return false;\n\n const merged: TablePaginationConfig = {\n showSizeChanger: true,\n showQuickJumper: true,\n pageSizeOptions: [\"10\", \"20\", \"50\"],\n showTotal: (total, range) => `${range[0]}–${range[1]} of ${total}`,\n ...paginationObj,\n current: resolvedQuery.page,\n pageSize: resolvedQuery.pageSize,\n style: { display: \"none\" },\n };\n\n if (mode === \"server\") {\n merged.total = paginationTotal;\n }\n\n return merged;\n }, [\n mode,\n pagination,\n paginationObj,\n paginationTotal,\n resolvedQuery.page,\n resolvedQuery.pageSize,\n ]);\n\n const handleTableChange: NonNullable<AntTableProps<T>[\"onChange\"]> = (\n nextPagination,\n filters,\n sorter,\n extra\n ) => {\n const active = firstSorter(sorter);\n const next: TableQuery = {\n ...queryRef.current,\n page: extra.action === \"paginate\" ? nextPagination.current ?? 1 : 1,\n pageSize: nextPagination.pageSize ?? queryRef.current.pageSize,\n filters,\n sortField: active?.field,\n sortOrder: active?.order ?? null,\n };\n\n if (mode === \"client\") {\n setClientFilteredCount(extra.currentDataSource.length);\n }\n\n emitQuery(next);\n onChange?.(nextPagination, filters, sorter, extra);\n };\n\n const handlePaginationChange = (page: number, pageSize: number) => {\n const next: TableQuery = {\n ...queryRef.current,\n page,\n pageSize,\n };\n emitQuery(next);\n onChange?.(\n { current: page, pageSize, total: paginationTotal },\n next.filters,\n {\n field: next.sortField,\n order: next.sortOrder,\n },\n { currentDataSource: rows, action: \"paginate\" }\n );\n };\n\n const bothControls = searchConfig.enabled && pagination !== false;\n const compactPager = isPhone || isTablet;\n\n return (\n <ConfigProvider\n theme={{\n components: {\n Table: {\n headerBg: colors.neutral.gray50,\n },\n },\n }}\n >\n <div style={{ minWidth: 0, width: \"100%\" }}>\n {searchConfig.enabled || pagination !== false ? (\n <div\n style={\n isPhone\n ? {\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"stretch\",\n gap: spacing.sm,\n marginBottom: spacing.md,\n }\n : {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: bothControls\n ? \"space-between\"\n : searchConfig.enabled\n ? \"flex-start\"\n : \"flex-end\",\n gap: spacing.md,\n flexWrap: isTablet ? \"wrap\" : \"nowrap\",\n marginBottom: spacing.md,\n }\n }\n >\n {searchConfig.enabled ? (\n <Input.Search\n allowClear\n disabled={tableLoading}\n placeholder={searchConfig.placeholder}\n value={inputSearch}\n onChange={(event) => {\n const value = event.target.value;\n setInputSearch(value);\n commitSearch(value);\n }}\n onSearch={(value) => {\n setInputSearch(value);\n commitSearch(value, true);\n }}\n style={\n isPhone\n ? { width: \"100%\" }\n : isTablet\n ? {\n width: 240,\n maxWidth: \"100%\",\n flex: \"0 1 240px\",\n minWidth: 160,\n }\n : { width: 320, flex: \"0 0 320px\", maxWidth: \"100%\" }\n }\n />\n ) : null}\n {pagination !== false ? (\n <div\n style={{\n display: \"flex\",\n justifyContent: isPhone ? \"center\" : \"flex-end\",\n maxWidth: \"100%\",\n minWidth: 0,\n overflowX: \"auto\",\n flex: isPhone ? undefined : \"1 1 auto\",\n }}\n >\n <Pagination\n current={resolvedQuery.page}\n pageSize={resolvedQuery.pageSize}\n total={paginationTotal}\n size={compactPager ? \"small\" : undefined}\n simple={isPhone}\n showLessItems={compactPager}\n responsive\n showSizeChanger={paginationObj?.showSizeChanger ?? !isPhone}\n showQuickJumper={paginationObj?.showQuickJumper ?? !compactPager}\n pageSizeOptions={paginationObj?.pageSizeOptions ?? [\"10\", \"20\", \"50\"]}\n showTotal={\n paginationObj?.showTotal ??\n (isPhone\n ? (total, range) => `${range[0]}–${range[1]} of ${total}`\n : compactPager\n ? undefined\n : (total, range) => `${range[0]}–${range[1]} of ${total}`)\n }\n disabled={paginationObj?.disabled || tableLoading}\n onChange={handlePaginationChange}\n style={{ margin: 0, flexShrink: 0 }}\n />\n </div>\n ) : null}\n </div>\n ) : null}\n <AntTable<T>\n {...rest}\n size={size ?? (isPhone ? \"small\" : \"middle\")}\n scroll={{ x: \"max-content\", ...scroll }}\n columns={displayColumns}\n dataSource={displayRows}\n rowKey={displayRowKey}\n pagination={resolvedPagination}\n onChange={handleTableChange}\n />\n </div>\n </ConfigProvider>\n );\n}\n\nTable.displayName = \"Table\";\n\nexport default Table;\n","import React from \"react\";\nimport { Tag as AntTag } from \"antd\";\nimport type { TagProps as AntTagProps } from \"antd\";\n\nexport interface TagProps extends AntTagProps {\n children?: React.ReactNode;\n}\n\nexport const Tag = React.forwardRef(function Tag(\n { children, ...rest }: TagProps,\n ref: React.Ref<HTMLSpanElement>\n) {\n return (\n <AntTag ref={ref} {...rest}>\n {children}\n </AntTag>\n );\n});","import React from \"react\";\nimport { Typography } from \"antd\";\nimport type { LinkProps as AntLinkProps } from \"antd/es/typography/Link\";\n\nconst { Link: AntLink } = Typography;\n\nexport interface LinkProps extends AntLinkProps {\n children?: React.ReactNode;\n}\n\nexport const Link = React.forwardRef(function Link(\n { children, ...rest }: LinkProps,\n ref: React.Ref<HTMLElement>\n) {\n return (\n <AntLink ref={ref} {...rest}>\n {children}\n </AntLink>\n );\n});","import React from \"react\";\nimport { Card as AntCard } from \"antd\";\nimport type { CardProps as AntCardProps } from \"antd\";\nimport { Skeleton } from \"../Skeleton\";\nimport \"./Card.css\";\n\nexport interface CardProps extends Omit<AntCardProps, \"title\" | \"loading\"> {\n title?: React.ReactNode;\n description?: React.ReactNode;\n tags?: React.ReactNode;\n extraInfo?: React.ReactNode;\n ctas?: React.ReactNode;\n layout?: \"inline\" | \"grid\";\n children?: React.ReactNode;\n /** Replace body content with a details skeleton while data is loading. */\n loading?: boolean;\n /** Placeholder field rows shown when `loading` is true. Default: 5 */\n loadingRows?: number;\n}\n\nexport const Card = React.forwardRef<HTMLDivElement, CardProps>(\n (\n {\n title,\n description,\n tags,\n extraInfo,\n ctas,\n layout = \"inline\",\n children,\n className = \"\",\n loading = false,\n loadingRows = 5,\n ...rest\n },\n ref\n ) => {\n return (\n <AntCard\n ref={ref}\n className={`cms-card cms-card-${layout} ${className}`}\n {...rest}\n >\n <div className=\"cms-card-content\">\n <div className=\"cms-card-main\">\n {title && <div className=\"cms-card-title\">{title}</div>}\n\n {description && (\n <div className=\"cms-card-description\">{description}</div>\n )}\n\n {tags && <div className=\"cms-card-tags\">{tags}</div>}\n\n {extraInfo && (\n <div className=\"cms-card-extra-info\">{extraInfo}</div>\n )}\n\n {loading ? <Skeleton.Details rows={loadingRows} /> : children}\n </div>\n\n {ctas && <div className=\"cms-card-ctas\">{ctas}</div>}\n </div>\n </AntCard>\n );\n }\n);\n\nCard.displayName = \"Card\";\n","import React from \"react\";\nimport type { CSSProperties, ReactNode } from \"react\";\nimport { Statistic } from \"antd\";\nimport type { StatisticProps } from \"antd\";\nimport { Card } from \"../Card\";\nimport { colors, fontSize, spacing } from \"../../theme\";\n\nexport type MetricCardVariant = \"solid\" | \"outlined\" | \"tinted\";\nexport type MetricCardLayout = \"vertical\" | \"horizontal\";\nexport type MetricCardSize = \"small\" | \"default\" | \"large\";\nexport type MetricCardStatus =\n | \"primary\"\n | \"success\"\n | \"warning\"\n | \"error\"\n | \"info\"\n | \"neutral\";\n\nexport interface MetricCardProps {\n title: ReactNode;\n value?: number | string | null;\n description?: ReactNode;\n variant?: MetricCardVariant;\n layout?: MetricCardLayout;\n size?: MetricCardSize;\n status?: MetricCardStatus;\n color?: string;\n textColor?: string;\n icon?: ReactNode;\n prefix?: StatisticProps[\"prefix\"];\n suffix?: StatisticProps[\"suffix\"];\n precision?: StatisticProps[\"precision\"];\n formatter?: StatisticProps[\"formatter\"];\n groupSeparator?: StatisticProps[\"groupSeparator\"];\n decimalSeparator?: StatisticProps[\"decimalSeparator\"];\n loading?: boolean;\n className?: string;\n style?: CSSProperties;\n}\n\ninterface MetricCardSizeConfig {\n minHeight?: number;\n padding: number;\n titleSize: number;\n valueSize: number;\n iconSize: number;\n}\n\nconst statusColors: Record<MetricCardStatus, string> = {\n primary: colors.brand.primary,\n success: colors.semantic.success,\n warning: colors.semantic.warning,\n error: colors.semantic.error,\n info: colors.semantic.info,\n neutral: colors.neutral.gray600,\n};\n\nconst sizeStyles: Record<MetricCardSize, MetricCardSizeConfig> = {\n small: {\n padding: spacing.sm,\n titleSize: fontSize.xs,\n valueSize: fontSize.md,\n iconSize: spacing.xl,\n },\n default: {\n minHeight: 120,\n padding: spacing.md,\n titleSize: fontSize.sm,\n valueSize: fontSize.xl,\n iconSize: 40,\n },\n large: {\n minHeight: 160,\n padding: spacing.md,\n titleSize: fontSize.md,\n valueSize: fontSize.xxl,\n iconSize: spacing.xxl,\n },\n};\n\nexport const MetricCard = React.forwardRef<HTMLDivElement, MetricCardProps>(\n (\n {\n title,\n value,\n description,\n variant = \"outlined\",\n layout = \"vertical\",\n size = \"default\",\n status = \"primary\",\n color,\n textColor,\n icon,\n prefix,\n suffix,\n precision,\n formatter,\n groupSeparator = \",\",\n decimalSeparator = \".\",\n loading = false,\n className,\n style,\n },\n ref\n ) => {\n const isMissingValue =\n value == null || (typeof value === \"number\" && !Number.isFinite(value));\n const displayValue = isMissingValue ? \"—\" : value;\n\n const accent = color ?? statusColors[status];\n const dimensions = sizeStyles[size];\n const isSolid = variant === \"solid\";\n const isTinted = variant === \"tinted\";\n\n const lightPreset =\n color == null && [\"success\", \"warning\", \"error\"].includes(status);\n\n const foreground =\n textColor ??\n (isSolid && !lightPreset\n ? colors.neutral.white\n : colors.neutral.gray800);\n\n const tintedBackground = `color-mix(in srgb, ${accent} 12%, ${colors.neutral.white})`;\n\n const cardBackground = isSolid\n ? accent\n : isTinted\n ? tintedBackground\n : colors.neutral.white;\n\n const cardBorder = isTinted\n ? \"none\"\n : `1px solid ${variant === \"outlined\" ? colors.neutral.gray200 : accent}`;\n\n const iconBadge = icon ? (\n <span\n aria-hidden=\"true\"\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n flexShrink: 0,\n width: dimensions.iconSize,\n height: dimensions.iconSize,\n borderRadius: \"50%\",\n fontSize: fontSize.lg,\n color: foreground,\n background: isSolid\n ? \"rgba(255, 255, 255, 0.18)\"\n : isTinted\n ? `color-mix(in srgb, ${accent} 22%, ${colors.neutral.white})`\n : colors.brand.primaryLight,\n }}\n >\n {icon}\n </span>\n ) : null;\n\n const hasDescription =\n description != null && description !== false && description !== \"\";\n\n return (\n <Card\n ref={ref}\n className={className}\n loading={loading}\n loadingRows={2}\n aria-busy={loading}\n styles={{\n body: {\n boxSizing: \"border-box\",\n padding: dimensions.padding,\n },\n }}\n style={{\n background: cardBackground,\n border: cardBorder,\n color: foreground,\n minHeight: dimensions.minHeight,\n minWidth: 0,\n ...style,\n }}\n >\n <div\n style={{\n display: \"flex\",\n flexDirection: layout === \"horizontal\" ? \"row\" : \"column\",\n gap: spacing.sm,\n minWidth: 0,\n }}\n >\n {layout === \"horizontal\" ? iconBadge : null}\n\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n flex: 1,\n minWidth: 0,\n }}\n >\n <div\n style={{\n color: foreground,\n fontSize: dimensions.titleSize,\n fontWeight: 500,\n lineHeight: 1.4,\n overflowWrap: \"anywhere\",\n }}\n >\n {title}\n </div>\n\n <div\n style={{\n display: \"flex\",\n alignItems: \"flex-end\",\n justifyContent: \"space-between\",\n gap: spacing.sm,\n paddingTop: spacing.xs,\n flexWrap: \"wrap\",\n }}\n >\n <Statistic\n value={displayValue}\n prefix={isMissingValue ? undefined : prefix}\n suffix={isMissingValue ? undefined : suffix}\n precision={precision}\n formatter={isMissingValue ? undefined : formatter}\n groupSeparator={groupSeparator}\n decimalSeparator={decimalSeparator}\n style={{ flex: 1, minWidth: 0 }}\n valueStyle={{\n color: foreground,\n fontSize: dimensions.valueSize,\n fontWeight: 600,\n lineHeight: 1.5,\n overflowWrap: \"anywhere\",\n }}\n />\n {layout === \"vertical\" ? iconBadge : null}\n </div>\n\n {hasDescription ? (\n <div\n style={{\n color: foreground,\n marginTop: spacing.xs,\n overflowWrap: \"anywhere\",\n }}\n >\n {description}\n </div>\n ) : null}\n </div>\n </div>\n </Card>\n );\n }\n);\n\nMetricCard.displayName = \"MetricCard\";\n\nexport default MetricCard;\n","import React from \"react\";\nimport type { CSSProperties } from \"react\";\nimport { colors, spacing, fontSize } from \"../../theme\";\n\nconst defaultPalette = [\n colors.brand.primary,\n colors.brand.accent,\n colors.semantic.success,\n colors.semantic.warning,\n colors.semantic.error,\n colors.neutral.gray500,\n] as const;\n\nexport interface ChartDatum {\n label: string;\n value: number;\n id?: string;\n color?: string;\n}\n\nexport interface GroupedChartDatum {\n label: string;\n values: Record<string, number>;\n id?: string;\n}\n\nexport const defaultFormatter = (value: number) => value.toLocaleString(\"en-IN\");\nexport const truncateLabel = (label: string, max: number) =>\n label.length > max ? `${label.slice(0, max - 1)}…` : label;\n\nexport function isGroupedData(\n data: (ChartDatum | GroupedChartDatum)[]\n): data is GroupedChartDatum[] {\n return data.length > 0 && \"values\" in data[0];\n}\n\nexport function ChartLegend({ items }: { items: { label: string; color: string }[] }) {\n return (\n <div\n aria-label=\"Chart legend\"\n style={{ display: \"flex\", flexWrap: \"wrap\", gap: spacing.md, marginBottom: spacing.xs }}\n >\n {items.map(({ label, color }) => (\n <span\n key={label}\n style={{ alignItems: \"center\", color: colors.neutral.gray700, display: \"inline-flex\", fontSize: fontSize.xs, gap: spacing.xs }}\n >\n <span aria-hidden=\"true\" style={{ background: color, borderRadius: \"50%\", height: 8, width: 8 }} />\n {label}\n </span>\n ))}\n </div>\n );\n}\n\nexport function ChartGrid({\n padding,\n width,\n chartHeight,\n maxValue,\n formatValue,\n}: {\n padding: { top: number; right: number; left: number };\n width: number;\n chartHeight: number;\n maxValue: number;\n formatValue: (v: number) => string;\n}) {\n return (\n <>\n {[0, 0.5, 1].map((ratio) => {\n const y = padding.top + chartHeight * (1 - ratio);\n return (\n <g key={ratio}>\n <line x1={padding.left} x2={width - padding.right} y1={y} y2={y} stroke={colors.neutral.gray200} />\n <text x={padding.left - 8} y={y + 4} textAnchor=\"end\" fill={colors.neutral.gray500} fontSize={11}>\n {formatValue(Math.round(maxValue * ratio))}\n </text>\n </g>\n );\n })}\n </>\n );\n}\n\nexport function ChartEmptyState({ height }: { height: number }) {\n return (\n <div\n style={{ alignItems: \"center\", color: colors.neutral.gray500, display: \"flex\", height, justifyContent: \"center\" }}\n >\n No data available\n </div>\n );\n}\n\nexport interface ColumnChartProps {\n data: ChartDatum[] | GroupedChartDatum[];\n mode?: \"basic\" | \"stacked\" | \"grouped\";\n seriesColors?: readonly string[];\n showLegend?: boolean;\n height?: number;\n color?: string;\n ariaLabel?: string;\n formatValue?: (value: number) => string;\n style?: CSSProperties;\n}\n\nexport function ColumnChart({\n data,\n mode = \"basic\",\n seriesColors = defaultPalette,\n showLegend = true,\n height = 280,\n color = colors.brand.primary,\n ariaLabel = \"Column chart\",\n formatValue = defaultFormatter,\n style,\n}: ColumnChartProps) {\n if (!data.length) return <ChartEmptyState height={height} />;\n\n const grouped = isGroupedData(data);\n const activeMode = grouped && mode === \"basic\" ? \"stacked\" : mode;\n const W = 640;\n const pad = { top: 28, right: 20, bottom: 48, left: 48 };\n const cH = height - pad.top - pad.bottom;\n const cW = W - pad.left - pad.right;\n\n let maxVal = 1;\n let legendKeys: string[] = [];\n let barContent: React.ReactNode;\n\n if (activeMode === \"stacked\" && grouped) {\n const gd = data as GroupedChartDatum[];\n legendKeys = [...new Set(gd.flatMap((d) => Object.keys(d.values)))];\n const totals = gd.map((d) => Object.values(d.values).reduce((s, v) => s + v, 0));\n maxVal = Math.max(...totals, 1);\n const slotW = cW / gd.length;\n const bw = Math.min(56, slotW * 0.58);\n\n barContent = gd.map((datum, i) => {\n const x = pad.left + slotW * i + (slotW - bw) / 2;\n let curY = pad.top + cH;\n return (\n <g key={datum.id ?? datum.label}>\n <title>{`${datum.label}: ${formatValue(totals[i])}`}</title>\n {legendKeys.map((series, sIdx) => {\n const val = datum.values[series] ?? 0;\n if (val <= 0) return null;\n const h = (val / maxVal) * cH;\n curY -= h;\n return (\n <rect key={series} x={x} y={curY} width={bw} height={h} fill={seriesColors[sIdx % seriesColors.length]}>\n <title>{`${datum.label} - ${series}: ${formatValue(val)}`}</title>\n </rect>\n );\n })}\n <text x={x + bw / 2} y={curY - 8} textAnchor=\"middle\" fill={colors.neutral.gray700} fontSize={11}>{formatValue(totals[i])}</text>\n <text x={x + bw / 2} y={height - 18} textAnchor=\"middle\" fill={colors.neutral.gray700} fontSize={11}>{truncateLabel(datum.label, 16)}</text>\n </g>\n );\n });\n } else if (activeMode === \"grouped\" && grouped) {\n const gd = data as GroupedChartDatum[];\n legendKeys = [...new Set(gd.flatMap((d) => Object.keys(d.values)))];\n maxVal = Math.max(...gd.flatMap((d) => Object.values(d.values)), 1);\n const slotW = cW / gd.length;\n const n = legendKeys.length;\n const gap = 2;\n const subW = Math.min(28, (slotW * 0.75 - (n - 1) * gap) / Math.max(n, 1));\n const grpW = n * subW + (n - 1) * gap;\n\n barContent = gd.map((datum, i) => {\n const gx = pad.left + slotW * i + (slotW - grpW) / 2;\n return (\n <g key={datum.id ?? datum.label}>\n {legendKeys.map((series, sIdx) => {\n const val = datum.values[series] ?? 0;\n const h = Math.max(0, (val / maxVal) * cH);\n return (\n <g key={series}>\n <title>{`${datum.label} - ${series}: ${formatValue(val)}`}</title>\n <rect x={gx + sIdx * (subW + gap)} y={pad.top + cH - h} width={subW} height={h} rx={3} fill={seriesColors[sIdx % seriesColors.length]} />\n </g>\n );\n })}\n <text x={pad.left + slotW * i + slotW / 2} y={height - 18} textAnchor=\"middle\" fill={colors.neutral.gray700} fontSize={11}>{truncateLabel(datum.label, 16)}</text>\n </g>\n );\n });\n } else {\n const sd = data as ChartDatum[];\n maxVal = Math.max(...sd.map((d) => d.value), 1);\n const slotW = cW / sd.length;\n const bw = Math.min(56, slotW * 0.58);\n\n barContent = sd.map((datum, i) => {\n const h = Math.max(0, (datum.value / maxVal) * cH);\n const x = pad.left + slotW * i + (slotW - bw) / 2;\n const y = pad.top + cH - h;\n return (\n <g key={datum.id ?? datum.label}>\n <title>{`${datum.label}: ${formatValue(datum.value)}`}</title>\n <rect x={x} y={y} width={bw} height={h} rx={4} fill={datum.color ?? color} />\n <text x={x + bw / 2} y={y - 8} textAnchor=\"middle\" fill={colors.neutral.gray700} fontSize={11}>{formatValue(datum.value)}</text>\n <text x={x + bw / 2} y={height - 18} textAnchor=\"middle\" fill={colors.neutral.gray700} fontSize={11}>{truncateLabel(datum.label, 16)}</text>\n </g>\n );\n });\n }\n\n const hasLegend = showLegend && legendKeys.length > 1;\n const legendH = hasLegend ? 28 : 0;\n const svgH = height - legendH;\n\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", height, justifyContent: \"flex-end\", ...style }}>\n {hasLegend && (\n <ChartLegend items={legendKeys.map((k, i) => ({ label: k, color: seriesColors[i % seriesColors.length] as string }))} />\n )}\n <svg aria-label={ariaLabel} role=\"img\" viewBox={`0 0 ${W} ${height}`} style={{ display: \"block\", height: svgH, maxWidth: \"100%\", width: \"100%\" }}>\n <title>{ariaLabel}</title>\n <ChartGrid padding={pad} width={W} chartHeight={cH} maxValue={maxVal} formatValue={formatValue} />\n {barContent}\n </svg>\n </div>\n );\n}\n\nexport default ColumnChart;\n","import React from \"react\";\nimport type { CSSProperties } from \"react\";\nimport {\n defaultFormatter,\n truncateLabel,\n isGroupedData,\n ChartEmptyState,\n ChartLegend,\n} from \"../ColumnGraph\";\nimport type { ChartDatum, GroupedChartDatum } from \"../ColumnGraph\";\nimport { colors } from \"../../theme\";\n\nconst defaultPalette = [\n colors.brand.primary,\n colors.brand.accent,\n colors.semantic.success,\n colors.semantic.warning,\n colors.semantic.error,\n colors.neutral.gray500,\n] as const;\nexport interface BarChartProps {\n data: ChartDatum[] | GroupedChartDatum[];\n mode?: \"basic\" | \"stacked\" | \"grouped\";\n seriesColors?: readonly string[];\n showLegend?: boolean;\n height?: number;\n color?: string;\n ariaLabel?: string;\n formatValue?: (value: number) => string;\n style?: CSSProperties;\n}\n\n\nexport function BarChart({\n data,\n mode = \"basic\",\n seriesColors = defaultPalette,\n showLegend = true,\n height = 280,\n color = colors.brand.primary,\n ariaLabel = \"Bar chart\",\n formatValue = defaultFormatter,\n style,\n}: BarChartProps) {\n if (!data.length) return <ChartEmptyState height={height} />;\n\n const grouped = isGroupedData(data);\n const activeMode = grouped && mode === \"basic\" ? \"stacked\" : mode;\n const W = 640;\n const pad = { top: 18, right: 70, bottom: 16, left: 145 };\n const cH = height - pad.top - pad.bottom;\n const cW = W - pad.left - pad.right;\n\n let maxVal = 1;\n let legendKeys: string[] = [];\n let rowContent: React.ReactNode;\n\n if (activeMode === \"stacked\" && grouped) {\n const gd = data as GroupedChartDatum[];\n legendKeys = [...new Set(gd.flatMap((d) => Object.keys(d.values)))];\n const totals = gd.map((d) => Object.values(d.values).reduce((s, v) => s + v, 0));\n const maxVal = Math.max(...totals, 1);\n const rowH = cH / gd.length;\n const bh = Math.min(28, rowH * 0.62);\n\n rowContent = gd.map((datum, i) => {\n const y = pad.top + i * rowH + (rowH - bh) / 2;\n let curX = pad.left;\n return (\n <g key={datum.id ?? datum.label}>\n <title>{`${datum.label}: ${formatValue(totals[i])}`}</title>\n <text x={pad.left - 10} y={y + bh / 2 + 4} textAnchor=\"end\" fill={colors.neutral.gray700} fontSize={11}>{truncateLabel(datum.label, 22)}</text>\n <rect x={pad.left} y={y} width={cW} height={bh} fill={colors.neutral.gray200} rx={4} />\n {legendKeys.map((series, sIdx) => {\n const val = datum.values[series] ?? 0;\n if (val <= 0) return null;\n const w = (val / maxVal) * cW;\n const segX = curX;\n curX += w;\n return (\n <rect key={series} x={segX} y={y} width={w} height={bh} fill={seriesColors[sIdx % seriesColors.length]}>\n <title>{`${datum.label} - ${series}: ${formatValue(val)}`}</title>\n </rect>\n );\n })}\n <text x={curX + 8} y={y + bh / 2 + 4} fill={colors.neutral.gray700} fontSize={11}>{formatValue(totals[i])}</text>\n </g>\n );\n });\n } else if (activeMode === \"grouped\" && grouped) {\n const gd = data as GroupedChartDatum[];\n legendKeys = [...new Set(gd.flatMap((d) => Object.keys(d.values)))];\n const maxVal = Math.max(...gd.flatMap((d) => Object.values(d.values)), 1);\n const rowH = cH / gd.length;\n const n = legendKeys.length;\n const gap = 2;\n const subH = Math.min(18, (rowH * 0.75 - (n - 1) * gap) / Math.max(n, 1));\n const grpH = n * subH + (n - 1) * gap;\n\n rowContent = gd.map((datum, i) => {\n const gy = pad.top + i * rowH + (rowH - grpH) / 2;\n return (\n <g key={datum.id ?? datum.label}>\n <text x={pad.left - 10} y={gy + grpH / 2 + 4} textAnchor=\"end\" fill={colors.neutral.gray700} fontSize={11}>{truncateLabel(datum.label, 22)}</text>\n {legendKeys.map((series, sIdx) => {\n const val = datum.values[series] ?? 0;\n const bw = (val / maxVal) * cW;\n const sy = gy + sIdx * (subH + gap);\n return (\n <g key={series}>\n <title>{`${datum.label} - ${series}: ${formatValue(val)}`}</title>\n <rect x={pad.left} y={sy} width={cW} height={subH} fill={colors.neutral.gray200} rx={2} />\n <rect x={pad.left} y={sy} width={bw} height={subH} fill={seriesColors[sIdx % seriesColors.length]} rx={2} />\n <text x={pad.left + bw + 6} y={sy + subH / 2 + 4} fill={colors.neutral.gray700} fontSize={10}>{formatValue(val)}</text>\n </g>\n );\n })}\n </g>\n );\n });\n } else {\n const sd = data as ChartDatum[];\n maxVal = Math.max(...sd.map((d) => d.value), 1);\n const rowH = cH / sd.length;\n const bh = Math.min(28, rowH * 0.62);\n\n rowContent = sd.map((datum, i) => {\n const y = pad.top + i * rowH + (rowH - bh) / 2;\n const bw = (datum.value / maxVal) * cW;\n return (\n <g key={datum.id ?? datum.label}>\n <title>{`${datum.label}: ${formatValue(datum.value)}`}</title>\n <text x={pad.left - 10} y={y + bh / 2 + 4} textAnchor=\"end\" fill={colors.neutral.gray700} fontSize={11}>{truncateLabel(datum.label, 22)}</text>\n <rect x={pad.left} y={y} width={cW} height={bh} fill={colors.neutral.gray200} rx={4} />\n <rect x={pad.left} y={y} width={bw} height={bh} fill={datum.color ?? color} rx={4} />\n <text x={pad.left + bw + 8} y={y + bh / 2 + 4} fill={colors.neutral.gray700} fontSize={11}>{formatValue(datum.value)}</text>\n </g>\n );\n });\n }\n\n const hasLegend = showLegend && legendKeys.length > 1;\n const legendH = hasLegend ? 28 : 0;\n const svgH = height - legendH;\n\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", height, justifyContent: \"flex-end\", ...style }}>\n {hasLegend && (\n <div style={{ paddingLeft: pad.left }}>\n <ChartLegend items={legendKeys.map((k, i) => ({ label: k, color: seriesColors[i % seriesColors.length] as string }))} />\n </div>\n )}\n <svg aria-label={ariaLabel} role=\"img\" viewBox={`0 0 ${W} ${height}`} style={{ display: \"block\", height: svgH, maxWidth: \"100%\", width: \"100%\" }}>\n <title>{ariaLabel}</title>\n {rowContent}\n </svg>\n </div>\n );\n}\n","import React from \"react\";\nimport type { CSSProperties } from \"react\";\nimport { defaultFormatter, ChartEmptyState } from \"../ColumnGraph\";\nimport type { ChartDatum } from \"../ColumnGraph\";\nimport { colors, fontSize, spacing } from \"../../theme\";\n\nconst defaultPalette = [\n colors.brand.primary,\n colors.brand.accent,\n colors.semantic.success,\n colors.semantic.warning,\n colors.semantic.error,\n colors.neutral.gray500,\n] as const;\n\nexport interface DonutChartProps {\n data: ChartDatum[];\n height?: number;\n centerLabel?: string;\n ariaLabel?: string;\n showLegend?: boolean;\n formatValue?: (value: number) => string;\n style?: CSSProperties;\n}\n\nexport function DonutChart({\n data, height = 280, centerLabel = \"Total\", ariaLabel = \"Donut chart\",\n showLegend = true, formatValue = defaultFormatter, style,\n}: DonutChartProps) {\n const usableData = data.filter(({ value }) => value > 0);\n const total = usableData.reduce((sum, { value }) => sum + value, 0);\n if (!total) return <ChartEmptyState height={height} />;\n\n const radius = 76;\n const circumference = 2 * Math.PI * radius;\n let consumed = 0;\n\n return (\n <div style={{ alignItems: \"center\", display: \"flex\", flexWrap: \"wrap\", gap: spacing.lg, justifyContent: \"center\", height, minHeight: height, ...style }}>\n <svg aria-label={ariaLabel} role=\"img\" viewBox=\"0 0 220 220\" style={{ height: Math.min(height, 220), width: Math.min(height, 220) }}>\n <title>{ariaLabel}</title>\n <circle cx=\"110\" cy=\"110\" fill=\"none\" r={radius} stroke={colors.neutral.gray200} strokeWidth=\"30\" />\n {usableData.map((datum, index) => {\n const segment = (datum.value / total) * circumference;\n const offset = -consumed;\n consumed += segment;\n return (\n <circle\n key={datum.id ?? datum.label}\n cx=\"110\" cy=\"110\" fill=\"none\" r={radius}\n stroke={datum.color ?? defaultPalette[index % defaultPalette.length]}\n strokeDasharray={`${segment} ${circumference - segment}`}\n strokeDashoffset={offset}\n strokeWidth=\"30\"\n transform=\"rotate(-90 110 110)\"\n >\n <title>{`${datum.label}: ${formatValue(datum.value)}`}</title>\n </circle>\n );\n })}\n <text x=\"110\" y=\"102\" textAnchor=\"middle\" fill={colors.neutral.gray500} fontSize=\"13\">{centerLabel}</text>\n <text x=\"110\" y=\"128\" textAnchor=\"middle\" fill={colors.neutral.gray700} fontSize=\"22\" fontWeight=\"600\">{formatValue(total)}</text>\n </svg>\n {showLegend ? (\n <div aria-label=\"Chart legend\" style={{ display: \"grid\", gap: spacing.xs }}>\n {usableData.map((datum, index) => (\n <div key={datum.id ?? datum.label} style={{ alignItems: \"center\", display: \"flex\", gap: spacing.xs }}>\n <span aria-hidden=\"true\" style={{ background: datum.color ?? defaultPalette[index % defaultPalette.length], borderRadius: \"50%\", height: 10, width: 10 }} />\n <span style={{ color: colors.neutral.gray700, fontSize: fontSize.xs }}>{datum.label}: {formatValue(datum.value)}</span>\n </div>\n ))}\n </div>\n ) : null}\n </div>\n );\n}\n","import React from \"react\";\nimport type { CSSProperties } from \"react\";\nimport { defaultFormatter, ChartEmptyState, ChartLegend, ChartGrid } from \"../ColumnGraph\";\nimport { colors } from \"../../theme\";\n\nconst defaultPalette = [\n colors.brand.primary,\n colors.brand.accent,\n colors.semantic.success,\n colors.semantic.warning,\n colors.semantic.error,\n colors.neutral.gray500,\n] as const;\n\nexport function createSmoothSplinePath(points: { x: number; y: number }[]): string {\n if (points.length === 0) return \"\";\n if (points.length === 1) return `M ${points[0].x} ${points[0].y}`;\n if (points.length === 2)\n return `M ${points[0].x} ${points[0].y} L ${points[1].x} ${points[1].y}`;\n\n let path = `M ${points[0].x} ${points[0].y}`;\n const tension = 0.2;\n\n for (let i = 0; i < points.length - 1; i++) {\n const p0 = points[i > 0 ? i - 1 : i];\n const p1 = points[i];\n const p2 = points[i + 1];\n const p3 = points[i + 2 < points.length ? i + 2 : i + 1];\n const cp1x = p1.x + (p2.x - p0.x) * tension;\n const cp1y = p1.y + (p2.y - p0.y) * tension;\n const cp2x = p2.x - (p3.x - p1.x) * tension;\n const cp2y = p2.y - (p3.y - p1.y) * tension;\n path += ` C ${cp1x.toFixed(2)} ${cp1y.toFixed(2)}, ${cp2x.toFixed(2)} ${cp2y.toFixed(2)}, ${p2.x.toFixed(2)} ${p2.y.toFixed(2)}`;\n }\n return path;\n}\n\nexport interface TimeSeriesDatum {\n date: string;\n value: number;\n series?: string;\n id?: string;\n}\n\nexport interface TimeSeriesChartProps {\n data: TimeSeriesDatum[];\n type?: \"line\" | \"area\" | \"step\";\n smooth?: boolean;\n height?: number;\n colors?: readonly string[];\n ariaLabel?: string;\n showLegend?: boolean;\n formatValue?: (value: number) => string;\n formatDate?: (date: string) => string;\n threshold?: number;\n thresholdLabel?: string;\n style?: CSSProperties;\n}\n\nexport function TimeSeriesChart({\n data, type = \"line\", smooth = false, height = 280,\n colors: seriesColors = defaultPalette, ariaLabel = \"Time series chart\",\n showLegend = true, formatValue = defaultFormatter,\n formatDate = (date) => date, threshold, thresholdLabel, style,\n}: TimeSeriesChartProps) {\n if (!data.length) return <ChartEmptyState height={height} />;\n\n const W = 640;\n const pad = { top: 28, right: 20, bottom: 48, left: 48 };\n const cH = height - pad.top - pad.bottom;\n const cW = W - pad.left - pad.right;\n const maxVal = Math.max(...data.map(({ value }) => value), threshold ?? 0, 1);\n const dates = [...new Set(data.map(({ date }) => date))];\n const seriesGroups = [...new Map(data.map((d) => [d.series ?? \"Value\", true])).keys()].map((s) => ({\n series: s,\n data: data.filter((d) => (d.series ?? \"Value\") === s),\n }));\n const xFor = (date: string) =>\n pad.left + (dates.length > 1 ? (dates.indexOf(date) / (dates.length - 1)) * cW : cW / 2);\n const yFor = (v: number) => pad.top + cH - (v / maxVal) * cH;\n const bottom = pad.top + cH;\n const dateIdxs = dates.length <= 6\n ? dates.map((_, i) => i)\n : [0, Math.round((dates.length - 1) / 2), dates.length - 1];\n\n const hasLegend = showLegend && seriesGroups.length > 1;\n const legendH = hasLegend ? 28 : 0;\n const svgH = height - legendH;\n\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", height, justifyContent: \"flex-end\", ...style }}>\n {hasLegend && (\n <ChartLegend items={seriesGroups.map(({ series: s }, i) => ({ label: s, color: seriesColors[i % seriesColors.length] as string }))} />\n )}\n <svg aria-label={ariaLabel} role=\"img\" viewBox={`0 0 ${W} ${height}`} style={{ display: \"block\", height: svgH, maxWidth: \"100%\", width: \"100%\" }}>\n <title>{ariaLabel}</title>\n <ChartGrid padding={pad} width={W} chartHeight={cH} maxValue={maxVal} formatValue={formatValue} />\n {dateIdxs.map((i) => (\n <text key={dates[i]} x={xFor(dates[i])} y={height - 18} textAnchor=\"middle\" fill={colors.neutral.gray700} fontSize={11}>\n {formatDate(dates[i])}\n </text>\n ))}\n {threshold != null && (\n <g>\n <line x1={pad.left} x2={W - pad.right} y1={yFor(threshold)} y2={yFor(threshold)} stroke={colors.semantic.error} strokeDasharray=\"5 4\" />\n <text x={W - pad.right} y={yFor(threshold) - 6} textAnchor=\"end\" fill={colors.semantic.error} fontSize={11}>\n {thresholdLabel ?? formatValue(threshold)}\n </text>\n </g>\n )}\n {seriesGroups.map(({ series: sName, data: sd }, idx) => {\n const clr = seriesColors[idx % seriesColors.length];\n const coords = sd.map((d) => ({ x: xFor(d.date), y: yFor(d.value) }));\n const first = coords[0];\n const last = coords[coords.length - 1];\n\n let pathD: string;\n if (type === \"step\") {\n pathD = sd.reduce((p, d, i) => {\n const x = xFor(d.date), y = yFor(d.value);\n return i === 0 ? `M ${x} ${y}` : `${p} H ${x} V ${y}`;\n }, \"\");\n } else if (smooth) {\n pathD = createSmoothSplinePath(coords);\n } else {\n pathD = coords.map((c, i) => `${i === 0 ? \"M\" : \"L\"} ${c.x} ${c.y}`).join(\" \");\n }\n\n return (\n <g key={sName}>\n {type === \"area\" && first && last && (\n <path d={`${pathD} L ${last.x} ${bottom} L ${first.x} ${bottom} Z`} fill={clr} fillOpacity={0.14} />\n )}\n <path d={pathD} fill=\"none\" stroke={clr} strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2.5\" />\n {sd.map((d) => (\n <circle key={d.id ?? `${sName}-${d.date}`} cx={xFor(d.date)} cy={yFor(d.value)} fill={clr} r=\"3\">\n <title>{`${sName}, ${formatDate(d.date)}: ${formatValue(d.value)}`}</title>\n </circle>\n ))}\n </g>\n );\n })}\n </svg>\n </div>\n );\n}\n\nexport const LineChart = TimeSeriesChart;\nexport type LineChartProps = TimeSeriesChartProps;\n","import React from \"react\";\nimport type { CSSProperties } from \"react\";\nimport { defaultFormatter, ChartEmptyState } from \"../ColumnGraph\";\nimport { fontSize, spacing, colors } from \"../../theme\";\n\nexport interface BulletDatum {\n label: string;\n value: number;\n target: number;\n ranges?: number[];\n max?: number;\n id?: string;\n}\n\nexport interface BulletChartProps {\n data: BulletDatum[];\n height?: number;\n ariaLabel?: string;\n formatValue?: (value: number) => string;\n style?: CSSProperties;\n}\n\n\nexport function BulletChart({\n data, height = 280, ariaLabel = \"Bullet chart\",\n formatValue = defaultFormatter, style,\n}: BulletChartProps) {\n if (!data.length) return <ChartEmptyState height={height} />;\n return (\n <div aria-label={ariaLabel} role=\"img\" style={{ display: \"flex\", flexDirection: \"column\", justifyContent: \"center\", gap: spacing.md, height, minHeight: height, ...style }}>\n {data.map((datum) => {\n const max = datum.max ?? Math.max(datum.value, datum.target, ...(datum.ranges ?? []), 1);\n const ranges = datum.ranges ?? [max * 0.6, max * 0.8, max];\n return (\n <div key={datum.id ?? datum.label}>\n <div style={{ color: colors.neutral.gray700, display: \"flex\", fontSize: fontSize.xs, justifyContent: \"space-between\", marginBottom: spacing.xxs }}>\n <span>{datum.label}</span><span>{formatValue(datum.value)} / {formatValue(datum.target)}</span>\n </div>\n <div style={{ background: colors.neutral.gray200, height: 20, overflow: \"hidden\", position: \"relative\" }}>\n {ranges.map((range, index) => (\n <span key={range} style={{ background: [\"#F5F5F5\", \"#E8EBF2\", \"#D9DFF0\"][Math.min(index, 2)], height: \"100%\", left: index === 0 ? 0 : `${(ranges[index - 1] / max) * 100}%`, position: \"absolute\", width: `${((range - (ranges[index - 1] ?? 0)) / max) * 100}%` }} />\n ))}\n <span style={{ background: colors.brand.primary, height: 8, left: 0, position: \"absolute\", top: 6, width: `${Math.min(100, (datum.value / max) * 100)}%` }} />\n <span aria-label={`Target ${formatValue(datum.target)}`} style={{ background: colors.neutral.gray700, height: \"100%\", left: `${Math.min(100, (datum.target / max) * 100)}%`, position: \"absolute\", top: 0, width: 2 }} />\n </div>\n </div>\n );\n })}\n </div>\n );\n}\n","import React from \"react\";\nimport type { CSSProperties } from \"react\";\nimport { defaultFormatter, ChartEmptyState, ColumnChart } from \"../ColumnGraph\";\n\nexport interface HistogramChartProps {\n data: number[];\n bins?: \"auto\" | number;\n height?: number;\n color?: string;\n ariaLabel?: string;\n style?: CSSProperties;\n}\n\nexport function HistogramChart({\n data,\n bins = \"auto\",\n height = 280,\n color,\n ariaLabel = \"Histogram\",\n style,\n}: HistogramChartProps) {\n if (!data.length) return <ChartEmptyState height={height} />;\n const min = Math.min(...data);\n const max = Math.max(...data);\n const binCount =\n typeof bins === \"number\"\n ? Math.max(1, Math.floor(bins))\n : Math.max(1, Math.ceil(Math.sqrt(data.length)));\n const size = max === min ? 1 : (max - min) / binCount;\n const bucketData = Array.from({ length: binCount }, (_, index) => {\n const start = min + index * size;\n const end = index === binCount - 1 ? max : start + size;\n const count = data.filter((value) =>\n index === binCount - 1 ? value >= start && value <= end : value >= start && value < end\n ).length;\n return { label: `${start.toFixed(0)}–${end.toFixed(0)}`, value: count };\n });\n return (\n <ColumnChart\n ariaLabel={ariaLabel}\n color={color}\n data={bucketData}\n formatValue={defaultFormatter}\n height={height}\n style={style}\n />\n );\n}\n","import React from \"react\";\nimport { Modal as AntModal } from \"antd\";\nimport type { ModalProps as AntModalProps, ModalFuncProps } from \"antd\";\n\nexport type { ModalFuncProps };\n\nexport interface ModalProps extends AntModalProps {\n children?: React.ReactNode;\n}\n\nexport interface ModalInterface extends React.FC<ModalProps> {\n info: typeof AntModal.info;\n success: typeof AntModal.success;\n error: typeof AntModal.error;\n warning: typeof AntModal.warning;\n warn: typeof AntModal.warn;\n confirm: typeof AntModal.confirm;\n destroyAll: typeof AntModal.destroyAll;\n config: typeof AntModal.config;\n useModal: typeof AntModal.useModal;\n}\n\nexport const Modal: ModalInterface = ({ children, ...rest }) => {\n return <AntModal {...rest}>{children}</AntModal>;\n};\n\nModal.info = AntModal.info;\nModal.success = AntModal.success;\nModal.error = AntModal.error;\nModal.warning = AntModal.warning;\nModal.warn = AntModal.warn;\nModal.confirm = AntModal.confirm;\nModal.destroyAll = AntModal.destroyAll;\nModal.config = AntModal.config;\nModal.useModal = AntModal.useModal;\nModal.displayName = \"Modal\";\n\nexport default Modal;\n","import React from \"react\";\nimport { Avatar, Breadcrumb, Typography } from \"antd\";\nimport { colors, spacing, fontSize, breakpoints } from \"../../theme\";\nimport { Button } from \"../Button\";\nimport type { ButtonVariant } from \"../Button\";\nimport { Dropdown } from \"../Dropdown\";\nimport type { MenuProps } from \"../Dropdown\";\n\nconst { Text, Title } = Typography;\n\nexport type HeaderBreadcrumb = {\n title: React.ReactNode;\n href?: string;\n onClick?: () => void;\n};\n\nexport type HeaderUser = {\n name: string;\n role?: string;\n avatarSrc?: string;\n};\n\nexport type HeaderAction = {\n key: string;\n label: React.ReactNode;\n variant?: ButtonVariant;\n icon?: React.ReactNode;\n onClick?: () => void;\n href?: string;\n disabled?: boolean;\n danger?: boolean;\n};\n\nexport interface HeaderProps {\n /** Page title on the left of the bar. */\n title?: React.ReactNode;\n /** Supporting text under the title. `description` is preferred. */\n description?: React.ReactNode;\n /** @deprecated Use `description`. */\n subtitle?: React.ReactNode;\n breadcrumbs?: HeaderBreadcrumb[];\n /** Primary CTAs, rendered on the top-right of the bar. */\n actions?: HeaderAction[];\n /** Extra nodes after the CTA buttons (filters, custom controls). */\n extra?: React.ReactNode;\n /** Slot before the title — typically a mobile menu button. */\n leading?: React.ReactNode;\n user?: HeaderUser | null;\n userMenu?: MenuProps;\n onLogout?: () => void;\n sticky?: boolean;\n className?: string;\n style?: React.CSSProperties;\n}\n\nfunction getInitials(name: string): string {\n const parts = name.trim().split(/\\s+/).filter(Boolean);\n if (parts.length === 0) return \"\";\n if (parts.length === 1) return parts[0].charAt(0).toUpperCase();\n return `${parts[0].charAt(0)}${parts[parts.length - 1].charAt(0)}`.toUpperCase();\n}\n\nexport const Header = React.forwardRef<HTMLElement, HeaderProps>(\n (\n {\n title,\n description,\n subtitle,\n breadcrumbs,\n actions,\n extra,\n leading,\n user,\n userMenu,\n onLogout,\n sticky = true,\n className,\n style,\n },\n ref\n ) => {\n const descriptionText = description ?? subtitle;\n const hasActions = Boolean(actions?.length || extra || user);\n\n const defaultUserItems: MenuProps[\"items\"] = [\n {\n key: \"profile\",\n label: user?.name,\n disabled: true,\n },\n ...(user?.role\n ? [{ key: \"role\", label: user.role, disabled: true }]\n : []),\n ...(onLogout\n ? [{ type: \"divider\" as const }, { key: \"logout\", label: \"Logout\", danger: true }]\n : []),\n ];\n\n const menu: MenuProps | undefined = user\n ? userMenu ?? {\n items: defaultUserItems,\n onClick: ({ key }) => {\n if (key === \"logout\") onLogout?.();\n },\n }\n : undefined;\n\n const breadcrumbItems = breadcrumbs?.map((item) => ({\n title:\n item.href || item.onClick ? (\n <a\n href={item.href ?? \"#\"}\n onClick={(event) => {\n if (!item.href) event.preventDefault();\n item.onClick?.();\n }}\n >\n {item.title}\n </a>\n ) : (\n item.title\n ),\n }));\n\n return (\n <header\n ref={ref}\n className={[\"cms-ds-header\", className].filter(Boolean).join(\" \")}\n style={{\n display: \"flex\",\n alignItems: \"flex-start\",\n justifyContent: \"space-between\",\n gap: spacing.lg,\n flexWrap: \"nowrap\",\n padding: `${spacing.lg}px ${spacing.xl}px`,\n background: \"transparent\",\n border: \"none\",\n borderBottom: `1px solid ${colors.neutral.gray200}`,\n boxShadow: \"none\",\n position: sticky ? \"sticky\" : undefined,\n top: sticky ? 0 : undefined,\n zIndex: sticky ? 20 : undefined,\n ...style,\n }}\n >\n <div\n style={{\n display: \"flex\",\n alignItems: \"flex-start\",\n gap: spacing.sm,\n flex: \"1 1 auto\",\n minWidth: 0,\n }}\n >\n {leading ? (\n <div\n style={{\n flexShrink: 0,\n display: \"flex\",\n alignItems: \"center\",\n paddingTop: 2,\n }}\n >\n {leading}\n </div>\n ) : null}\n\n <div style={{ flex: 1, minWidth: 0 }}>\n {breadcrumbItems && breadcrumbItems.length > 0 ? (\n <Breadcrumb\n items={breadcrumbItems}\n style={{\n fontSize: fontSize.xs,\n marginBottom: spacing.xs,\n }}\n />\n ) : null}\n {title ? (\n <Title\n level={3}\n ellipsis={{ tooltip: typeof title === \"string\" ? title : undefined }}\n style={{\n margin: 0,\n color: colors.neutral.gray900,\n fontSize: fontSize.xl,\n lineHeight: \"32px\",\n fontWeight: 600,\n }}\n >\n {title}\n </Title>\n ) : null}\n {descriptionText ? (\n <Text\n style={{\n display: \"block\",\n marginTop: spacing.xxs,\n color: colors.neutral.gray600,\n fontSize: fontSize.sm,\n lineHeight: \"22px\",\n maxWidth: 720,\n }}\n >\n {descriptionText}\n </Text>\n ) : null}\n </div>\n </div>\n\n {hasActions ? (\n <div\n className=\"cms-ds-header-actions\"\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-end\",\n gap: spacing.sm,\n flex: \"0 0 auto\",\n flexWrap: \"wrap\",\n paddingTop: title ? 2 : 0,\n }}\n >\n {extra}\n {actions?.map((action) => (\n <Button\n key={action.key}\n variant={action.variant ?? \"default\"}\n icon={action.icon}\n onClick={action.onClick}\n href={action.href}\n disabled={action.disabled}\n danger={action.danger}\n >\n {action.label}\n </Button>\n ))}\n {user && menu ? (\n <Dropdown menu={menu} trigger={[\"click\"]} placement=\"bottomRight\">\n <button\n type=\"button\"\n aria-label={user.name}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: spacing.xs,\n border: \"none\",\n background: \"transparent\",\n cursor: \"pointer\",\n padding: spacing.xxs,\n borderRadius: 999,\n flexShrink: 0,\n }}\n >\n <Avatar\n size={36}\n src={user.avatarSrc}\n alt={user.name}\n style={{\n backgroundColor: colors.brand.primary,\n color: colors.neutral.white,\n fontWeight: 600,\n fontSize: fontSize.xs,\n }}\n >\n {getInitials(user.name)}\n </Avatar>\n </button>\n </Dropdown>\n ) : null}\n </div>\n ) : null}\n\n <style>\n {`@media (max-width: ${breakpoints.md - 1}px) {\n .cms-ds-header { flex-wrap: wrap; }\n .cms-ds-header-actions { width: 100%; justify-content: flex-start; }\n }`}\n </style>\n </header>\n );\n }\n);\n\nHeader.displayName = \"Header\";\n","// Default Indus Action logo (data URL). Source PNG: ./IndusActionLogoFull.png\nexport const indusActionLogo: string =\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAACWCAYAAABkW7XSAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAEu2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSfvu78nIGlkPSdXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQnPz4KPHg6eG1wbWV0YSB4bWxuczp4PSdhZG9iZTpuczptZXRhLyc+CjxyZGY6UkRGIHhtbG5zOnJkZj0naHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyc+CgogPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9JycKICB4bWxuczpBdHRyaWI9J2h0dHA6Ly9ucy5hdHRyaWJ1dGlvbi5jb20vYWRzLzEuMC8nPgogIDxBdHRyaWI6QWRzPgogICA8cmRmOlNlcT4KICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0nUmVzb3VyY2UnPgogICAgIDxBdHRyaWI6Q3JlYXRlZD4yMDI1LTA0LTIzPC9BdHRyaWI6Q3JlYXRlZD4KICAgICA8QXR0cmliOkV4dElkPjYwYThkMzVlLTM2NDMtNDg2Ni05NjYxLWY4NTI2N2ZjNGEyNTwvQXR0cmliOkV4dElkPgogICAgIDxBdHRyaWI6RmJJZD41MjUyNjU5MTQxNzk1ODA8L0F0dHJpYjpGYklkPgogICAgIDxBdHRyaWI6VG91Y2hUeXBlPjI8L0F0dHJpYjpUb3VjaFR5cGU+CiAgICA8L3JkZjpsaT4KICAgPC9yZGY6U2VxPgogIDwvQXR0cmliOkFkcz4KIDwvcmRmOkRlc2NyaXB0aW9uPgoKIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PScnCiAgeG1sbnM6ZGM9J2h0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvJz4KICA8ZGM6dGl0bGU+CiAgIDxyZGY6QWx0PgogICAgPHJkZjpsaSB4bWw6bGFuZz0neC1kZWZhdWx0Jz5Mb2dvX1VwZGF0ZWQgLSAxPC9yZGY6bGk+CiAgIDwvcmRmOkFsdD4KICA8L2RjOnRpdGxlPgogPC9yZGY6RGVzY3JpcHRpb24+CgogPHJkZjpEZXNjcmlwdGlvbiBy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\";\n","import React from \"react\";\n\ntype IconProps = {\n size?: number;\n className?: string;\n style?: React.CSSProperties;\n};\n\nexport function LogoutIcon({ size = 14, className, style }: IconProps) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n className={className}\n style={style}\n >\n <path d=\"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4\" />\n <polyline points=\"16 17 21 12 16 7\" />\n <line x1=\"21\" y1=\"12\" x2=\"9\" y2=\"12\" />\n </svg>\n );\n}\n\nexport function CollapseIcon({\n collapsed,\n size = 14,\n className,\n style,\n}: IconProps & { collapsed?: boolean }) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n className={className}\n style={{\n transform: collapsed ? \"rotate(180deg)\" : undefined,\n ...style,\n }}\n >\n <polyline points=\"15 18 9 12 15 6\" />\n </svg>\n );\n}\n\nexport function MenuIcon({ size = 18, className, style }: IconProps) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n aria-hidden=\"true\"\n className={className}\n style={style}\n >\n <line x1=\"3\" y1=\"6\" x2=\"21\" y2=\"6\" />\n <line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\" />\n <line x1=\"3\" y1=\"18\" x2=\"21\" y2=\"18\" />\n </svg>\n );\n}\n\nexport function CloseIcon({ size = 14, className, style }: IconProps) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n aria-hidden=\"true\"\n className={className}\n style={style}\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n );\n}\n\nexport function DownloadIcon({ size = 14, className, style }: IconProps) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"64 64 896 896\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n className={className}\n style={style}\n >\n <path d=\"M505.7 661a8 8 0 0012.6 0l112-122c4.6-5 1-13-5.7-13H544V224c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v302h-80.6c-6.7 0-10.4 8-5.7 13l112 122zM832 768H192c-17.7 0-32 14.3-32 32v48c0 4.4 3.6 8 8 8h688c4.4 0 8-3.6 8-8v-48c0-17.7-14.3-32-32-32z\" />\n </svg>\n );\n}\n","import React, { useEffect, useState } from \"react\";\nimport type { ReactNode } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport {\n Avatar,\n Button,\n ConfigProvider,\n Drawer,\n Grid,\n Layout,\n Menu,\n Popconfirm,\n Typography,\n} from \"antd\";\nimport type { MenuProps, SiderProps } from \"antd\";\nimport { colors, spacing, fontSize, breakpoints } from \"../../theme\";\nimport { indusActionLogo as defaultLogo } from \"../../assets/indusActionLogo\";\nimport {\n LogoutIcon,\n CollapseIcon,\n MenuIcon,\n CloseIcon,\n} from \"../../assets/icons\";\n\nconst { Sider } = Layout;\n\nconst MOBILE_HEADER = spacing.xxl;\nconst LOGO_HEIGHT = spacing.xxl + spacing.md;\nconst LOGO_HEIGHT_COMPACT = spacing.lg;\n\nexport type SideNavItem = NonNullable<NonNullable<MenuProps[\"items\"]>[number]>;\n\nexport interface SideNavUser {\n name: string;\n role?: string;\n avatarSrc?: string;\n}\n\nexport interface SideNavProps extends Omit<SiderProps, \"children\" | \"breakpoint\"> {\n items?: MenuProps[\"items\"];\n menu?: Omit<MenuProps, \"items\" | \"mode\">;\n user?: SideNavUser | null;\n onLogout?: () => void;\n logoutLabel?: string;\n logoSrc?: string;\n logoAlt?: string;\n logo?: ReactNode;\n /**\n * Below this breakpoint the sider becomes a drawer (phone layout).\n * Set `false` to always keep the desktop sider.\n * @default \"md\"\n */\n breakpoint?: SiderProps[\"breakpoint\"] | false;\n /**\n * When false, skip the fixed mobile logo bar. Use when a parent header\n * already provides a menu trigger (for example AppShell).\n * @default true\n */\n showMobileBar?: boolean;\n /** Replace or hide (`null`) the default mobile menu button. */\n mobileTrigger?: ReactNode | null;\n mobileOpen?: boolean;\n onMobileOpenChange?: (open: boolean) => void;\n}\n\nfunction useBelowBreakpoint(breakpoint: SiderProps[\"breakpoint\"] | false) {\n const screens = Grid.useBreakpoint();\n if (!breakpoint) return false;\n if (Object.keys(screens).length === 0) {\n if (typeof window === \"undefined\") return false;\n return window.matchMedia(\n `(max-width: ${breakpoints[breakpoint] - 1}px)`\n ).matches;\n }\n return !screens[breakpoint];\n}\n\nfunction getInitials(name: string): string {\n const parts = name.trim().split(/\\s+/).filter(Boolean);\n if (parts.length === 0) return \"\";\n if (parts.length === 1) return parts[0].charAt(0).toUpperCase();\n return `${parts[0].charAt(0)}${parts[parts.length - 1].charAt(0)}`.toUpperCase();\n}\n\nfunction SideNavFooter({\n user,\n collapsed = false,\n onLogout,\n logoutLabel = \"Logout\",\n}: {\n user?: SideNavUser | null;\n collapsed?: boolean;\n onLogout?: () => void;\n logoutLabel?: string;\n}) {\n if (!user && !onLogout) return null;\n\n const initials = user ? getInitials(user.name) : \"\";\n\n const logoutButton = (\n <Button\n type=\"text\"\n size=\"small\"\n icon={<LogoutIcon />}\n aria-label={logoutLabel}\n style={{\n color: colors.brand.primary,\n width: 28,\n height: 28,\n padding: spacing.none,\n flexShrink: 0,\n }}\n />\n );\n\n return (\n <div\n style={{\n flexShrink: 0,\n padding: collapsed ? spacing.sm : spacing.md,\n display: \"flex\",\n flexDirection: collapsed ? \"column\" : \"row\",\n alignItems: \"center\",\n gap: spacing.xs,\n background: colors.neutral.white,\n }}\n >\n {user ? (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: spacing.xs,\n justifyContent: collapsed ? \"center\" : \"flex-start\",\n minWidth: 0,\n flex: 1,\n }}\n >\n <Avatar\n size={28}\n src={user.avatarSrc}\n alt={user.name}\n style={{\n backgroundColor: colors.brand.primary,\n color: colors.neutral.white,\n fontWeight: 600,\n fontSize: fontSize.xs,\n flexShrink: 0,\n }}\n >\n {initials}\n </Avatar>\n {collapsed ? null : (\n <div style={{ minWidth: 0, flex: 1 }}>\n <Typography.Text\n strong\n ellipsis\n style={{\n display: \"block\",\n color: colors.neutral.gray800,\n fontSize: fontSize.sm,\n lineHeight: \"18px\",\n }}\n >\n {user.name}\n </Typography.Text>\n {user.role ? (\n <Typography.Text\n ellipsis\n style={{\n display: \"block\",\n color: colors.neutral.gray500,\n fontSize: fontSize.xxs,\n lineHeight: \"16px\",\n }}\n >\n {user.role}\n </Typography.Text>\n ) : null}\n </div>\n )}\n </div>\n ) : null}\n\n {onLogout ? (\n <Popconfirm\n title={logoutLabel}\n description=\"Are you sure you want to logout?\"\n okText=\"Yes\"\n cancelText=\"No\"\n onConfirm={onLogout}\n placement=\"top\"\n >\n {logoutButton}\n </Popconfirm>\n ) : null}\n </div>\n );\n}\n\nfunction SideNavPanel({\n collapsed,\n items,\n menuStyle,\n menuTheme,\n menuRest,\n user,\n onLogout,\n logoutLabel,\n logoSrc,\n logoAlt,\n logo,\n headerButton,\n}: {\n collapsed: boolean;\n items?: MenuProps[\"items\"];\n menuStyle?: React.CSSProperties;\n menuTheme?: MenuProps[\"theme\"];\n menuRest: Omit<MenuProps, \"items\" | \"mode\" | \"style\" | \"theme\">;\n user?: SideNavUser | null;\n onLogout?: () => void;\n logoutLabel?: string;\n logoSrc: string;\n logoAlt: string;\n logo?: ReactNode;\n headerButton?: ReactNode;\n}) {\n return (\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n height: \"100%\",\n minHeight: 0,\n background: colors.neutral.white,\n overflow: \"hidden\",\n }}\n >\n <div\n style={{\n flexShrink: 0,\n background: colors.neutral.white,\n display: \"flex\",\n flexDirection: collapsed ? \"column\" : \"row\",\n alignItems: \"center\",\n gap: spacing.xs,\n padding: collapsed ? spacing.sm : spacing.md,\n }}\n >\n <div\n style={{\n flex: 1,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: collapsed ? \"center\" : \"flex-start\",\n minWidth: 0,\n }}\n >\n {logo ?? (\n <img\n src={logoSrc}\n alt={logoAlt}\n style={{\n display: \"block\",\n width: \"auto\",\n maxWidth: \"100%\",\n height: collapsed ? LOGO_HEIGHT_COMPACT : LOGO_HEIGHT,\n maxHeight: collapsed ? LOGO_HEIGHT_COMPACT : LOGO_HEIGHT,\n objectFit: \"contain\",\n objectPosition: collapsed ? \"center\" : \"left center\",\n }}\n />\n )}\n </div>\n {headerButton}\n </div>\n\n <div\n style={{\n flex: \"1 1 0%\",\n minHeight: 0,\n overflow: \"auto\",\n }}\n >\n <ConfigProvider\n theme={{\n components: {\n Menu: {\n itemMarginInline: spacing.xxs,\n itemPaddingInline: spacing.md,\n },\n },\n }}\n >\n <Menu\n mode=\"inline\"\n inlineIndent={spacing.sm}\n theme={menuTheme}\n items={items}\n style={{\n borderInlineEnd: \"none\",\n paddingBlock: spacing.sm,\n ...menuStyle,\n }}\n {...menuRest}\n />\n </ConfigProvider>\n </div>\n\n <SideNavFooter\n user={user}\n collapsed={collapsed}\n onLogout={onLogout}\n logoutLabel={logoutLabel}\n />\n </div>\n );\n}\n\nexport function SideNav({\n items,\n menu,\n user,\n onLogout,\n logoutLabel,\n logoSrc = defaultLogo,\n logoAlt = \"Indus Action\",\n logo,\n width = 256,\n theme = \"light\",\n collapsed: collapsedProp,\n defaultCollapsed,\n onCollapse,\n collapsible,\n trigger,\n style,\n breakpoint = \"md\",\n showMobileBar = true,\n mobileTrigger,\n mobileOpen: mobileOpenProp,\n onMobileOpenChange,\n ...siderProps\n}: SideNavProps) {\n const isMobile = useBelowBreakpoint(breakpoint);\n const [uncontrolledCollapsed, setUncontrolledCollapsed] = useState(\n defaultCollapsed ?? false\n );\n const [uncontrolledMobileOpen, setUncontrolledMobileOpen] = useState(false);\n\n const isCollapsedControlled = collapsedProp !== undefined;\n const collapsed = isCollapsedControlled\n ? collapsedProp\n : uncontrolledCollapsed;\n\n const isMobileOpenControlled = mobileOpenProp !== undefined;\n const mobileOpen = isMobileOpenControlled\n ? mobileOpenProp\n : uncontrolledMobileOpen;\n\n const setMobileOpen = (open: boolean) => {\n if (!isMobileOpenControlled) setUncontrolledMobileOpen(open);\n onMobileOpenChange?.(open);\n };\n\n const handleCollapse: SiderProps[\"onCollapse\"] = (value, type) => {\n if (!isCollapsedControlled) setUncontrolledCollapsed(value);\n onCollapse?.(value, type);\n };\n\n useEffect(() => {\n if (!isMobile) setMobileOpen(false);\n }, [isMobile]);\n\n useEffect(() => {\n if (!isMobile || !showMobileBar) return;\n const previous = document.body.style.paddingTop;\n document.body.style.paddingTop = `${MOBILE_HEADER}px`;\n return () => {\n document.body.style.paddingTop = previous;\n };\n }, [isMobile, showMobileBar]);\n\n const {\n style: menuStyle,\n theme: menuTheme,\n onClick: menuOnClick,\n ...menuRest\n } = menu ?? {};\n\n const handleMenuClick: MenuProps[\"onClick\"] = (info) => {\n menuOnClick?.(info);\n if (isMobile) setMobileOpen(false);\n };\n\n const useHeaderToggle = Boolean(collapsible) && trigger === undefined;\n const panelTheme = menuTheme ?? theme;\n\n const iconButtonStyle: React.CSSProperties = {\n color: colors.brand.primary,\n width: 28,\n height: 28,\n padding: spacing.none,\n flexShrink: 0,\n };\n\n const panel = (\n headerButton: ReactNode,\n panelCollapsed: boolean\n ) => (\n <SideNavPanel\n collapsed={panelCollapsed}\n items={items}\n menuStyle={menuStyle}\n menuTheme={panelTheme}\n menuRest={{ ...menuRest, onClick: handleMenuClick }}\n user={user}\n onLogout={onLogout}\n logoutLabel={logoutLabel}\n logoSrc={logoSrc}\n logoAlt={logoAlt}\n logo={logo}\n headerButton={headerButton}\n />\n );\n\n if (isMobile) {\n const hamburger =\n showMobileBar && mobileTrigger !== null\n ? (mobileTrigger ?? (\n <Button\n type=\"text\"\n aria-label=\"Open navigation\"\n icon={<MenuIcon />}\n onClick={() => setMobileOpen(true)}\n style={iconButtonStyle}\n />\n ))\n : null;\n\n return (\n <>\n {showMobileBar\n ? createPortal(\n <header\n style={{\n position: \"fixed\",\n top: 0,\n left: 0,\n right: 0,\n height: MOBILE_HEADER,\n zIndex: 1000,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: spacing.xs,\n paddingInline: spacing.md,\n background: colors.neutral.white,\n }}\n >\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n minWidth: 0,\n flex: 1,\n }}\n >\n {logo ?? (\n <img\n src={logoSrc}\n alt={logoAlt}\n style={{\n display: \"block\",\n height: LOGO_HEIGHT_COMPACT,\n width: \"auto\",\n maxWidth: \"100%\",\n objectFit: \"contain\",\n objectPosition: \"left center\",\n }}\n />\n )}\n </div>\n {hamburger}\n </header>,\n document.body\n )\n : null}\n <Drawer\n placement=\"left\"\n open={mobileOpen}\n onClose={() => setMobileOpen(false)}\n width={width}\n closable={false}\n zIndex={1100}\n styles={{\n body: {\n padding: 0,\n height: \"100%\",\n display: \"flex\",\n flexDirection: \"column\",\n },\n }}\n >\n {panel(\n <Button\n type=\"text\"\n size=\"small\"\n aria-label=\"Close navigation\"\n icon={<CloseIcon />}\n onClick={() => setMobileOpen(false)}\n style={iconButtonStyle}\n />,\n false\n )}\n </Drawer>\n </>\n );\n }\n\n return (\n <Sider\n theme={theme}\n width={width}\n collapsed={collapsed}\n collapsible={collapsible}\n trigger={useHeaderToggle ? null : trigger}\n onCollapse={handleCollapse}\n style={{\n height: \"100vh\",\n position: \"sticky\",\n top: 0,\n overflow: \"hidden\",\n borderRight: `1px solid ${colors.neutral.gray200}`,\n background: colors.neutral.white,\n ...style,\n }}\n {...siderProps}\n >\n {panel(\n useHeaderToggle ? (\n <Button\n type=\"text\"\n size=\"small\"\n aria-label={collapsed ? \"Expand navigation\" : \"Collapse navigation\"}\n icon={<CollapseIcon collapsed={collapsed} />}\n onClick={() => handleCollapse(!collapsed, \"clickTrigger\")}\n style={iconButtonStyle}\n />\n ) : null,\n collapsed\n )}\n </Sider>\n );\n}\n\nSideNav.displayName = \"SideNav\";\n\nexport default SideNav;\nexport { defaultLogo as indusActionLogo };\n","import React from \"react\";\nimport { Result } from \"antd\";\nimport type { ResultProps } from \"antd\";\nimport { Button } from \"../Button\";\nimport { colors } from \"../../theme\";\n\nexport type StatusPageStatus = NonNullable<ResultProps[\"status\"]>;\n\nexport interface StatusPageProps {\n status: StatusPageStatus;\n title?: React.ReactNode;\n subTitle?: React.ReactNode;\n actionLabel?: string;\n /** Click handler for the default action button. */\n onAction?: () => void;\n /** If set, the default action button renders as a link. */\n actionHref?: string;\n /** Replaces the default action button. */\n extra?: React.ReactNode;\n /** Fill the viewport and center the result. Default: true. */\n fullPage?: boolean;\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport function StatusPage({\n status,\n title,\n subTitle,\n actionLabel,\n onAction,\n actionHref,\n extra,\n fullPage = true,\n className,\n style,\n}: StatusPageProps) {\n const action =\n extra ??\n (actionLabel ? (\n <Button\n variant=\"primary\"\n size=\"large\"\n {...(actionHref ? { href: actionHref } : {})}\n onClick={onAction}\n >\n {actionLabel}\n </Button>\n ) : undefined);\n\n const result = (\n <Result\n status={status}\n title={title}\n subTitle={subTitle}\n extra={action}\n />\n );\n\n if (!fullPage) {\n return (\n <div className={className} style={style}>\n {result}\n </div>\n );\n }\n\n return (\n <div\n className={className}\n style={{\n minHeight: \"100vh\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n background: colors.neutral.gray50,\n ...style,\n }}\n >\n {result}\n </div>\n );\n}\n\nStatusPage.displayName = \"StatusPage\";\n","import React from \"react\";\nimport { StatusPage } from \"./StatusPage\";\nimport type { StatusPageProps } from \"./StatusPage\";\n\nexport type NotFoundPageProps = Omit<StatusPageProps, \"status\">;\n\nexport function NotFoundPage({\n title = \"404\",\n subTitle = \"Sorry, the page you visited does not exist.\",\n actionLabel = \"Home Page\",\n actionHref,\n onAction,\n extra,\n ...rest\n}: NotFoundPageProps) {\n const href = actionHref ?? (onAction || extra ? undefined : \"/\");\n\n return (\n <StatusPage\n status=\"404\"\n title={title}\n subTitle={subTitle}\n actionLabel={actionLabel}\n actionHref={href}\n onAction={onAction}\n extra={extra}\n {...rest}\n />\n );\n}\n\nNotFoundPage.displayName = \"NotFoundPage\";\n\nexport default NotFoundPage;\n","import React from \"react\";\nimport { StatusPage } from \"./StatusPage\";\nimport type { StatusPageProps } from \"./StatusPage\";\n\nexport type UnauthorizedPageProps = Omit<StatusPageProps, \"status\">;\n\nexport function UnauthorizedPage({\n title = \"Unauthorized Access\",\n subTitle = \"You don't have permission to access this. Please ask the site admin for access.\",\n actionLabel = \"Back\",\n actionHref,\n onAction,\n extra,\n ...rest\n}: UnauthorizedPageProps) {\n const href = actionHref ?? (onAction || extra ? undefined : \"/\");\n\n return (\n <StatusPage\n status=\"403\"\n title={title}\n subTitle={subTitle}\n actionLabel={actionLabel}\n actionHref={href}\n onAction={onAction}\n extra={extra}\n {...rest}\n />\n );\n}\n\nUnauthorizedPage.displayName = \"UnauthorizedPage\";\n\nexport default UnauthorizedPage;\n","import React, { createContext, useContext, useMemo } from \"react\";\nimport type { ReactNode, CSSProperties } from \"react\";\nimport { Alert as AntAlert, ConfigProvider, message, notification } from \"antd\";\nimport type { AlertProps as AntAlertProps } from \"antd\";\nimport { colors } from \"../../theme\";\n\nexport type InlineAlertType = \"success\" | \"info\" | \"warning\" | \"error\";\nexport type InlineAlertVariant = \"outlined\" | \"filled\";\n\nexport interface InlineAlertProps extends Omit<AntAlertProps, \"variant\"> {\n type?: InlineAlertType;\n variant?: InlineAlertVariant;\n showIcon?: boolean;\n}\n\nconst FILLED_BG: Record<InlineAlertType, string> = {\n success: colors.semantic.success,\n error: colors.semantic.error,\n warning: colors.semantic.warning,\n info: colors.brand.primary,\n};\n\nexport const InlineAlert = React.forwardRef<\n React.ComponentRef<typeof AntAlert>,\n InlineAlertProps\n>(function InlineAlert(\n {\n type = \"info\",\n showIcon = true,\n variant = \"outlined\",\n style,\n className,\n ...rest\n },\n ref\n) {\n const isFilled = variant === \"filled\";\n const alertStyle: CSSProperties = {\n ...(isFilled\n ? {\n backgroundColor: FILLED_BG[type],\n borderColor: FILLED_BG[type],\n color: colors.neutral.white,\n }\n : undefined),\n ...style,\n };\n\n const alertElement = (\n <AntAlert\n ref={ref}\n type={type}\n showIcon={showIcon}\n style={alertStyle}\n className={[\n isFilled ? \"cms-alert-filled\" : \"cms-alert-outlined\",\n className,\n ]\n .filter(Boolean)\n .join(\" \")}\n {...rest}\n />\n );\n\n if (isFilled) {\n return (\n <ConfigProvider\n theme={{\n components: {\n Alert: {\n colorText: colors.neutral.white,\n colorTextHeading: colors.neutral.white,\n colorIcon: colors.neutral.white,\n colorIconHover: colors.neutral.gray200,\n },\n },\n }}\n >\n {alertElement}\n </ConfigProvider>\n );\n }\n\n return alertElement;\n});\n\nInlineAlert.displayName = \"InlineAlert\";\n\nexport type ToastApi = ReturnType<typeof message.useMessage>[0];\nexport type ToastConfig = Parameters<ToastApi[\"open\"]>[0];\nexport type ToastTypeMethod = ToastApi[\"success\"];\n\nexport type AntNotificationConfig = Parameters<\n ReturnType<typeof notification.useNotification>[0][\"open\"]\n>[0];\n\nexport type NotificationPlacement = NonNullable<AntNotificationConfig[\"placement\"]>;\n\nexport interface NotificationConfig extends Omit<AntNotificationConfig, \"btn\"> {\n actions?: ReactNode;\n btn?: ReactNode;\n}\n\nexport type NotificationApi = Omit<\n ReturnType<typeof notification.useNotification>[0],\n \"open\" | \"success\" | \"error\" | \"info\" | \"warning\"\n> & {\n open: (config: NotificationConfig) => void;\n success: (config: NotificationConfig) => void;\n error: (config: NotificationConfig) => void;\n info: (config: NotificationConfig) => void;\n warning: (config: NotificationConfig) => void;\n};\n\nexport type NotificationTypeMethod = NotificationApi[\"success\"];\n\n\nexport interface NotificationContextValue {\n toast: ToastApi;\n notify: NotificationApi;\n}\n\nexport interface NotificationProviderProps {\n children: ReactNode;\n}\n\nconst NotificationContext = createContext<NotificationContextValue | null>(null);\n\nexport const useNotification = (): NotificationContextValue => {\n const context = useContext(NotificationContext);\n if (!context) {\n throw new Error(\n \"useNotification must be used within a <NotificationProvider>. Wrap your component tree with <NotificationProvider>.\"\n );\n }\n return context;\n};\n\nexport const useNotifications = useNotification;\n\nexport interface NotificationProviderComponent\n extends React.FC<NotificationProviderProps> {\n Alert: typeof InlineAlert;\n}\n\nconst toAntNotifyArgs = (config: NotificationConfig): any => ({\n ...config,\n btn: config.actions ?? config.btn,\n});\n\nconst InternalNotificationProvider: React.FC<NotificationProviderProps> = ({\n children,\n}) => {\n const [messageApi, messageContextHolder] = message.useMessage();\n const [notificationApi, notificationContextHolder] =\n notification.useNotification();\n\n const value = useMemo<NotificationContextValue>(\n () => ({\n toast: messageApi,\n notify: {\n ...notificationApi,\n open: (config) => notificationApi.open(toAntNotifyArgs(config)),\n success: (config) => notificationApi.success(toAntNotifyArgs(config)),\n error: (config) => notificationApi.error(toAntNotifyArgs(config)),\n info: (config) => notificationApi.info(toAntNotifyArgs(config)),\n warning: (config) => notificationApi.warning(toAntNotifyArgs(config)),\n },\n }),\n [messageApi, notificationApi]\n );\n\n return (\n <NotificationContext.Provider value={value}>\n {messageContextHolder}\n {notificationContextHolder}\n {children}\n </NotificationContext.Provider>\n );\n};\n\nexport const NotificationProvider: NotificationProviderComponent = Object.assign(\n InternalNotificationProvider,\n {\n Alert: InlineAlert,\n }\n);\n\n"]}
|