@trsys-tech/matrix-library 1.0.0-canary.9 → 1.0.1-canary-2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/data-grid/DataGrid.d.ts +2 -0
- package/dist/components/data-grid/DataGrid.d.ts.map +1 -1
- package/dist/components/date-picker/DesktopDatePicker.d.ts +3 -2
- package/dist/components/date-picker/DesktopDatePicker.d.ts.map +1 -1
- package/dist/components/date-picker/DesktopDateRangePicker.d.ts +3 -2
- package/dist/components/date-picker/DesktopDateRangePicker.d.ts.map +1 -1
- package/dist/components/date-picker/DesktopTimePicker.d.ts +1 -0
- package/dist/components/date-picker/DesktopTimePicker.d.ts.map +1 -1
- package/dist/components/date-picker/MobileDatePicker.d.ts +3 -2
- package/dist/components/date-picker/MobileDatePicker.d.ts.map +1 -1
- package/dist/components/date-picker/MobileDateRangePicker.d.ts +3 -2
- package/dist/components/date-picker/MobileDateRangePicker.d.ts.map +1 -1
- package/dist/components/date-picker/MobileTimePicker.d.ts +1 -0
- package/dist/components/date-picker/MobileTimePicker.d.ts.map +1 -1
- package/dist/components/date-picker/TimePickerContent.d.ts +2 -1
- package/dist/components/date-picker/TimePickerContent.d.ts.map +1 -1
- package/dist/datagrid.es.js +175 -152
- package/dist/datagrid.es.js.map +1 -1
- package/dist/desktopdatepicker.es.js +28 -25
- package/dist/desktopdatepicker.es.js.map +1 -1
- package/dist/desktopdaterangepicker.es.js +19 -17
- package/dist/desktopdaterangepicker.es.js.map +1 -1
- package/dist/desktoptimepicker.es.js +28 -21
- package/dist/desktoptimepicker.es.js.map +1 -1
- package/dist/mobiledatepicker.es.js +22 -20
- package/dist/mobiledatepicker.es.js.map +1 -1
- package/dist/mobiledaterangepicker.es.js +24 -22
- package/dist/mobiledaterangepicker.es.js.map +1 -1
- package/dist/mobiletimepicker.es.js +33 -26
- package/dist/mobiletimepicker.es.js.map +1 -1
- package/dist/timepickercontent.es.js +65 -42
- package/dist/timepickercontent.es.js.map +1 -1
- package/package.json +1 -1
package/dist/datagrid.es.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"datagrid.es.js","sources":["../src/components/data-grid/DataGrid.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport React, { forwardRef, HTMLAttributes, useMemo } from \"react\";\r\nimport { AgGridReact, AgGridReactProps } from \"ag-grid-react\";\r\nimport { GridApi, GridReadyEvent, themeQuartz, AllCommunityModule, ModuleRegistry, Theme } from \"ag-grid-community\";\r\nimport { CircleXmark, ElipsisVertical, Magnifier, Print, Refresh, Snowflake, Trashcan } from \"@trsys-tech/matrix-icons\";\r\n\r\nimport { cn } from \"../../lib/utils\";\r\nimport { printHtml } from \"../../lib/printHtml\";\r\nimport { TextField } from \"../text-field/TextField\";\r\nimport { Button, ButtonProps } from \"../button/Button\";\r\nimport { IconButton, IconButtonProps } from \"../icon-botton/IconButton\";\r\nimport { Popover, PopoverContent, PopoverContentProps, PopoverProps, PopoverTrigger, PopoverTriggerProps } from \"../popover/Popover\";\r\n\r\n// Register all Community features\r\n// Todo: Register only the required features\r\nModuleRegistry.registerModules([AllCommunityModule]);\r\n\r\n/**\r\n * Default ag-Grid theme used by DataGrid.\r\n */\r\nconst dataGridDefaultTheme = themeQuartz.withParams({\r\n fontFamily: \"DMSans\",\r\n fontSize: \"12px\",\r\n headerFontSize: \"12px\",\r\n headerFontWeight: 700,\r\n headerBackgroundColor: \"oklch(var(--mtx-primary-50))\",\r\n backgroundColor: \"oklch(var(--mtx-gray-0))\",\r\n accentColor: \"oklch(var(--mtx-primary-300))\",\r\n foregroundColor: \"oklch(var(--mtx-text-500))\",\r\n cellTextColor: \"oklch(var(--mtx-text-500))\",\r\n});\r\n\r\n/**\r\n * Shared DataGrid state exposed through context.\r\n */\r\ntype DataGridContext = {\r\n api: GridApi | null;\r\n setApi: (value: GridApi) => void;\r\n rowData: any[] | null | undefined;\r\n setRowData: (value: any[] | null | undefined) => void;\r\n gridId: string;\r\n quickFilterText: string;\r\n setQuickFilterText: (value: string) => void;\r\n actionbarExists: boolean;\r\n setActionbarExists: (value: boolean) => void;\r\n actionbarHeight: number;\r\n setActionbarHeight: (value: number) => void;\r\n pinnedRowIds: Set<string>;\r\n setPinnedRowIds: (value: Set<string>) => void;\r\n};\r\n\r\nconst DataGridContext = React.createContext<DataGridContext | null>(null);\r\n\r\n/**\r\n * Returns the current DataGrid context.\r\n */\r\nconst useDataGrid = () => {\r\n const context = React.useContext(DataGridContext);\r\n\r\n if (!context) {\r\n throw new Error(\"useDataGrid should be used within <DataGrid>\");\r\n }\r\n\r\n return context;\r\n};\r\n\r\n/**\r\n * Props for the root DataGrid provider.\r\n */\r\ntype DataGridProps = {\r\n /** Content rendered inside the provider. */\r\n children: React.ReactNode;\r\n};\r\n\r\n/**\r\n * DataGrid provider.\r\n * Provides shared state for the grid shell, content, and toolbar actions.\r\n * @param {DataGridProps} props - DataGrid props.\r\n * @param {React.ReactNode} children - Content rendered inside the provider.\r\n * @returns {React.ReactElement}\r\n */\r\nconst DataGrid: React.FC<DataGridProps> = ({ children }) => {\r\n const gridId = React.useId();\r\n const [api, setApi] = React.useState<GridApi | null>(null);\r\n const [rowData, setRowData] = React.useState<any[] | null | undefined>([]);\r\n const [actionbarHeight, setActionbarHeight] = React.useState(0);\r\n const [pinnedRowIds, setPinnedRowIds] = React.useState<Set<string>>(new Set());\r\n\r\n const [quickFilterText, setQuickFilterText] = React.useState(\"\");\r\n const [actionbarExists, setActionbarExists] = React.useState(false);\r\n return (\r\n <DataGridContext.Provider\r\n value={{\r\n api,\r\n setApi,\r\n rowData,\r\n setRowData,\r\n gridId,\r\n quickFilterText,\r\n setQuickFilterText,\r\n actionbarExists,\r\n setActionbarExists,\r\n actionbarHeight,\r\n setActionbarHeight,\r\n pinnedRowIds,\r\n setPinnedRowIds,\r\n }}\r\n >\r\n {children}\r\n </DataGridContext.Provider>\r\n );\r\n};\r\n\r\n/**\r\n * Props for the Ag Grid content wrapper.\r\n */\r\ntype DataGridContentProps = Omit<AgGridReactProps, \"theme\"> & {\r\n /** Optional theme override forwarded to ag-Grid. */\r\n theme?: Theme;\r\n};\r\n\r\n/**\r\n * DataGridContent component.\r\n * Connects ag-Grid to the shared DataGrid context and keeps pinned rows separate from the main row set.\r\n * @param {DataGridContentProps} props - Ag Grid props.\r\n * @param {Theme} [theme] - Optional ag-Grid theme override.\r\n * @param {GridReadyEvent} [onGridReady] - Called when the grid becomes ready.\r\n * @param {any[] | null | undefined} [rowData] - Row data rendered by the grid.\r\n * @param {string} [quickFilterText] - Quick filter text synced from the search action.\r\n * @param {React.CSSProperties} [containerStyle] - Inline styles applied to the grid container.\r\n * @param {Function} [getRowId] - Resolves the row id used to keep pinned rows stable.\r\n * @param {React.ForwardedRef<AgGridReact>} ref - Grid ref.\r\n * @returns {React.ReactElement}\r\n */\r\nconst DataGridContent = forwardRef<AgGridReact, DataGridContentProps>(\r\n ({ theme: propTheme, onGridReady, quickFilterText: quickFilterTextProps, rowData: rowDataProps, containerStyle, getRowId, ...props }, ref) => {\r\n const context = React.useContext(DataGridContext);\r\n\r\n if (!context) {\r\n throw new Error(\"DataGridContent should be used within <DataGrid>\");\r\n }\r\n const { rowData, setRowData, actionbarExists, setApi, setQuickFilterText, quickFilterText, gridId, actionbarHeight, pinnedRowIds } = context;\r\n\r\n const theme = useMemo(() => {\r\n return dataGridDefaultTheme.withParams({\r\n headerHeight: 40,\r\n wrapperBorderRadius: actionbarExists ? \"0px 0px 8px 8px\" : \"8px\",\r\n });\r\n }, [actionbarExists]);\r\n\r\n const handleGridReady = (e: GridReadyEvent) => {\r\n setApi(e.api);\r\n onGridReady?.(e);\r\n };\r\n\r\n React.useEffect(() => {\r\n setRowData(rowDataProps);\r\n }, [rowDataProps, setRowData]);\r\n\r\n React.useEffect(() => {\r\n if (quickFilterTextProps !== undefined) {\r\n setQuickFilterText(quickFilterTextProps ?? \"\");\r\n }\r\n }, [quickFilterTextProps, setQuickFilterText]);\r\n\r\n const { finalRowData, finalPinnedTopRowData } = useMemo(() => {\r\n if (!rowData || pinnedRowIds.size === 0) {\r\n return { finalRowData: rowData, finalPinnedTopRowData: [] };\r\n }\r\n\r\n const pinned: any[] = [];\r\n const unpinned: any[] = [];\r\n\r\n rowData.forEach(data => {\r\n const id = getRowId ? getRowId({ data, level: 0 } as any) : (data as any).id;\r\n const stringId = id !== undefined && id !== null ? String(id) : undefined;\r\n\r\n if (stringId !== undefined && pinnedRowIds.has(stringId)) {\r\n pinned.push(data);\r\n } else {\r\n unpinned.push(data);\r\n }\r\n });\r\n\r\n return { finalRowData: unpinned, finalPinnedTopRowData: pinned };\r\n }, [rowData, pinnedRowIds, getRowId]);\r\n\r\n return (\r\n <AgGridReact\r\n gridId={gridId}\r\n theme={propTheme ?? theme}\r\n rowData={finalRowData}\r\n pinnedTopRowData={finalPinnedTopRowData}\r\n quickFilterText={quickFilterText}\r\n onGridReady={handleGridReady}\r\n containerStyle={{ height: `calc(100% - ${actionbarHeight}px)`, ...containerStyle }}\r\n getRowId={getRowId}\r\n {...props}\r\n ref={ref}\r\n />\r\n );\r\n },\r\n);\r\n\r\nDataGridContent.displayName = \"DataGridContent\";\r\n\r\n/**\r\n * Props for the DataGrid action bar container.\r\n */\r\ntype DatagridActionBarProps = HTMLAttributes<HTMLDivElement> & {};\r\n\r\n/**\r\n * DataGrid action bar.\r\n * Marks the grid as having a toolbar so the grid can adjust border radius and height.\r\n * @param {DatagridActionBarProps} props - Action bar props.\r\n * @param {React.ReactNode} children - Action bar content.\r\n * @param {string} className - Additional classes applied to the action bar.\r\n * @returns {React.ReactElement}\r\n */\r\nconst DataGridActionBar: React.FC<DatagridActionBarProps> = ({ className, ...props }) => {\r\n const context = React.useContext(DataGridContext);\r\n\r\n if (!context) {\r\n throw new Error(\"DataGridActionBar should be used within <DataGrid>\");\r\n }\r\n const ref = React.useRef<HTMLDivElement | null>(null);\r\n const { setActionbarExists, setActionbarHeight } = context;\r\n const { children } = props;\r\n\r\n React.useEffect(() => {\r\n setActionbarExists(true);\r\n return () => setActionbarExists(false);\r\n }, [setActionbarExists]);\r\n\r\n React.useEffect(() => {\r\n if (ref.current) {\r\n setActionbarHeight(ref.current.clientHeight);\r\n }\r\n }, [setActionbarHeight]);\r\n\r\n return (\r\n <div\r\n className={cn(\r\n \"mtx-relative mtx-flex mtx-items-center mtx-p-2 mtx-h-12 mtx-w-full mtx-bg-gray-0 mtx-border mtx-border-gray-200 mtx-border-b-0 -mtx-mb-[1px] mtx-z-10 mtx-rounded-t-[8px]\",\r\n className,\r\n )}\r\n ref={ref}\r\n >\r\n {children}\r\n </div>\r\n );\r\n};\r\n\r\n/**\r\n * Props for SearchAction.\r\n */\r\ntype SearchActionProps = HTMLAttributes<HTMLDivElement> & {\r\n /** Opens the search input immediately on mount. */\r\n defaultOpen?: boolean;\r\n /** Focuses the input the first time it opens. */\r\n defaultOpenAutoFocus?: boolean;\r\n};\r\n\r\n/**\r\n * Search action.\r\n * Toggles the quick filter input and manages its open/close focus behavior.\r\n * @param {SearchActionProps} props - Search action props.\r\n * @param {boolean} [defaultOpen] - Opens the search input immediately on mount.\r\n * @param {boolean} [defaultOpenAutoFocus] - Focuses the input the first time it opens.\r\n * @param {React.ReactNode} children - Optional wrapper content.\r\n * @param {string} className - Additional wrapper classes.\r\n * @returns {React.ReactElement}\r\n */\r\nconst SearchAction: React.FC<SearchActionProps> = ({\r\n defaultOpen = false,\r\n defaultOpenAutoFocus = true,\r\n className,\r\n ...props\r\n}: SearchActionProps): React.ReactElement => {\r\n const context = React.useContext(DataGridContext);\r\n\r\n if (!context) {\r\n throw new Error(\"SearchAction should be used within <DataGrid>\");\r\n }\r\n\r\n const { quickFilterText, setQuickFilterText } = context;\r\n\r\n const [isSearchInputOpen, setIsSearchInputOpen] = React.useState(defaultOpen);\r\n const [isClosing, setIsClosing] = React.useState(false);\r\n const inputRef = React.useRef<HTMLInputElement | null>(null);\r\n const isFirstRender = React.useRef(true);\r\n\r\n const handleClear = () => {\r\n context.setQuickFilterText(\"\");\r\n if (inputRef.current) {\r\n inputRef.current.focus();\r\n }\r\n };\r\n\r\n const handleOpen = () => {\r\n setIsSearchInputOpen(true);\r\n };\r\n\r\n React.useEffect(() => {\r\n if (isSearchInputOpen && inputRef?.current && (defaultOpenAutoFocus || !isFirstRender.current)) {\r\n inputRef.current.focus();\r\n }\r\n isFirstRender.current = false;\r\n }, [isSearchInputOpen, defaultOpenAutoFocus]);\r\n\r\n const handleClose = () => {\r\n setIsClosing(true);\r\n context.setQuickFilterText(\"\");\r\n setTimeout(() => {\r\n setIsSearchInputOpen(false);\r\n setIsClosing(false);\r\n }, 200);\r\n };\r\n\r\n return (\r\n <div className={cn(\"mtx-max-w-60\", className)} {...props}>\r\n {isSearchInputOpen || isClosing ? (\r\n <TextField\r\n ref={inputRef}\r\n className={cn(\r\n \"mtx-relative mtx-h-7.5\",\r\n isSearchInputOpen && !isClosing ? \"mtx-animate-input-open\" : \"\",\r\n isClosing && \"mtx-animate-input-close\",\r\n )}\r\n onChange={e => setQuickFilterText(e.target.value)}\r\n value={quickFilterText}\r\n startAdornment={\r\n <IconButton variant=\"toolbar\" type=\"button\" className=\"mtx-p-0.5 mtx-h-6 mtx-w-6 mtx-border-none mtx-mx-1\" onClick={handleClose}>\r\n <Magnifier className=\"mtx-w-5 mtx-h-5\" />\r\n </IconButton>\r\n }\r\n endAdornment={\r\n quickFilterText && (\r\n <IconButton variant=\"toolbar\" type=\"button\" className=\"mtx-p-0.5 mtx-w-6 mtx-h-6 mtx-border-none mtx-mx-1\" onClick={handleClear}>\r\n <CircleXmark className=\"mtx-w-5 mtx-h-5\" />\r\n </IconButton>\r\n )\r\n }\r\n />\r\n ) : (\r\n <IconButton variant=\"toolbar\" type=\"button\" className=\"mtx-p-0.5 mtx-w-6 mtx-h-6 mtx-m-1\" onClick={handleOpen}>\r\n <Magnifier className=\"mtx-w-5 mtx-h-5\" />\r\n </IconButton>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\n/**\r\n * Props for FreezeAction.\r\n */\r\ntype FreezeActionProps = ButtonProps & {\r\n /** Label shown when rows can be frozen. */\r\n freezeText?: string;\r\n /** Label shown when rows are already frozen. */\r\n unFreezeText?: string;\r\n};\r\n\r\n/**\r\n * Freeze action.\r\n * Pins the current selection when rows are selected, or clears pinned rows when the grid is already frozen.\r\n * @param {FreezeActionProps} props - Freeze action props.\r\n * @param {boolean} [disabled] - Disables the action button.\r\n * @param {React.MouseEventHandler<HTMLButtonElement>} [onClick] - Called after the freeze toggle runs.\r\n * @returns {React.ReactElement}\r\n */\r\nconst FreezeAction: React.FC<FreezeActionProps> = ({\r\n freezeText,\r\n unFreezeText,\r\n onClick,\r\n disabled,\r\n ...props\r\n}: FreezeActionProps): React.ReactElement => {\r\n const context = React.useContext(DataGridContext);\r\n\r\n if (!context) {\r\n throw new Error(\"FreezeAction should be used within <DataGrid>\");\r\n }\r\n\r\n const [pinnedRowCount, setPinnedRowCount] = React.useState(0);\r\n const [selectedRowsCount, setSelectedRowsCount] = React.useState(0);\r\n\r\n const { api, pinnedRowIds, setPinnedRowIds } = context;\r\n\r\n const freezeRows = () => {\r\n if (!api) return;\r\n\r\n // Get currently selected rows\r\n const selectedRows = api.getSelectedNodes();\r\n\r\n if (selectedRows.length > 0) {\r\n const newPinnedIds = new Set(pinnedRowIds);\r\n selectedRows.forEach(row => {\r\n if (row.id !== undefined) {\r\n newPinnedIds.add(row.id);\r\n }\r\n });\r\n setPinnedRowIds(newPinnedIds);\r\n api.deselectAll();\r\n }\r\n };\r\n\r\n const unfreezeRows = () => {\r\n setPinnedRowIds(new Set());\r\n };\r\n\r\n const handleFreezing = (e: React.MouseEvent<HTMLButtonElement>) => {\r\n if (api) {\r\n const pinnedRowsCount = api.getPinnedTopRowCount();\r\n if (pinnedRowsCount > 0) {\r\n unfreezeRows();\r\n } else {\r\n freezeRows();\r\n }\r\n }\r\n onClick?.(e);\r\n };\r\n\r\n React.useEffect(() => {\r\n api?.addEventListener(\"pinnedRowDataChanged\", () => {\r\n setPinnedRowCount(api.getPinnedTopRowCount());\r\n });\r\n\r\n api?.addEventListener(\"selectionChanged\", () => {\r\n setSelectedRowsCount(api.getSelectedNodes().length);\r\n });\r\n\r\n return () => {\r\n if (api?.isDestroyed()) return;\r\n api?.removeEventListener(\"pinnedRowDataChanged\", () => {\r\n setPinnedRowCount(api.getPinnedTopRowCount());\r\n });\r\n\r\n api?.removeEventListener(\"selectionChanged\", () => {\r\n setSelectedRowsCount(api.getSelectedNodes().length);\r\n });\r\n };\r\n }, [api]);\r\n\r\n return (\r\n <Button\r\n variant=\"text\"\r\n onClick={handleFreezing}\r\n startIcon={<Snowflake className=\"mtx-w-4.5 mtx-h-4.5\" />}\r\n disabled={(!pinnedRowCount && !selectedRowsCount) || disabled}\r\n type=\"button\"\r\n {...props}\r\n >\r\n {pinnedRowCount ? (unFreezeText ?? \"Unfreeze\") : (freezeText ?? \"Freeze\")}\r\n </Button>\r\n );\r\n};\r\n\r\n/**\r\n * Props for PrintAction.\r\n */\r\ntype PrintActionProps = IconButtonProps & {};\r\n\r\n/**\r\n * Print action.\r\n * Switches the grid to print layout, captures the rendered markup, and opens the browser print flow.\r\n * @param {PrintActionProps} props - Print action props.\r\n * @param {React.ReactNode} [children] - Custom icon content rendered in the button.\r\n * @param {string} [className] - Additional button classes.\r\n * @param {React.MouseEventHandler<HTMLButtonElement>} [onClick] - Called after printing is triggered.\r\n * @returns {React.ReactElement}\r\n */\r\nconst PrintAction: React.FC<PrintActionProps> = ({ children, className, onClick, ...props }) => {\r\n const context = React.useContext(DataGridContext);\r\n\r\n if (!context) {\r\n throw new Error(\"PrintAction should be used within <DataGrid>\");\r\n }\r\n\r\n const handlePrint = (e: React.MouseEvent<HTMLButtonElement>) => {\r\n if (context.api) {\r\n context.api.setGridOption(\"domLayout\", \"print\");\r\n\r\n setTimeout(() => {\r\n const element = document.querySelector(\"[grid-id='\" + context.gridId + \"']\") as HTMLElement;\r\n const header = document.head;\r\n const html = `<html>\r\n ${header.innerHTML}\r\n ${element.outerHTML}\r\n </html>`;\r\n printHtml(html);\r\n context?.api?.setGridOption(\"domLayout\", undefined);\r\n });\r\n }\r\n onClick?.(e);\r\n };\r\n\r\n return (\r\n <IconButton variant=\"toolbar\" type=\"button\" className={cn(\"mtx-p-0.5 mtx-w-6 mtx-h-6\", className)} onClick={handlePrint} {...props}>\r\n {children ?? <Print className=\"mtx-w-5 mtx-h-5\" />}\r\n </IconButton>\r\n );\r\n};\r\n\r\n/**\r\n * Props for RefreshAction.\r\n */\r\ntype RefreshActionProps = Omit<IconButtonProps, \"onClick\"> & {\r\n /** Callback invoked when the refresh action is clicked. */\r\n onRefresh: () => void;\r\n};\r\n\r\n/**\r\n * Refresh action.\r\n * Calls the provided refresh callback and reflects the loading state in the toolbar button.\r\n * @param {RefreshActionProps} props - Refresh action props.\r\n * @param {() => void} onRefresh - Called when the button is clicked.\r\n * @param {boolean} [loading] - Shows the loading spinner and disables the button.\r\n * @param {React.ReactNode} [children] - Custom icon content rendered in the button.\r\n * @param {string} [className] - Additional button classes.\r\n * @returns {React.ReactElement}\r\n */\r\nconst RefreshAction: React.FC<RefreshActionProps> = ({ className, onRefresh, children, loading, ...props }) => {\r\n const context = React.useContext(DataGridContext);\r\n\r\n if (!context) {\r\n throw new Error(\"RefreshAction should be used within <DataGrid>\");\r\n }\r\n\r\n const handleRefresh = () => {\r\n onRefresh();\r\n };\r\n\r\n return (\r\n <IconButton\r\n className={cn(\"mtx-p-0.5 mtx-w-6 mtx-h-6\", loading && \"disabled:mtx-bg-transparent\", className)}\r\n variant=\"toolbar\"\r\n type=\"button\"\r\n onClick={handleRefresh}\r\n disabled={loading}\r\n {...props}\r\n >\r\n {children ?? <Refresh className={cn(\"mtx-w-4.5 mtx-h-4.5\", loading && \"mtx-animate-spin\")} />}\r\n </IconButton>\r\n );\r\n};\r\n\r\n/**\r\n * Props for DeleteAction.\r\n */\r\ntype DeleteActionProps = Omit<ButtonProps, \"onClick\"> & {\r\n /** Callback invoked when the delete action is clicked. */\r\n onDelete: () => void;\r\n};\r\n\r\n/**\r\n * Delete action.\r\n * Renders a danger button with the delete icon and delegates the click to the provided handler.\r\n * @param {DeleteActionProps} props - Delete action props.\r\n * @param {() => void} onDelete - Called when the button is clicked.\r\n * @param {React.ReactNode} [children] - Button label or custom content.\r\n * @returns {React.ReactElement}\r\n */\r\nconst DeleteAction: React.FC<DeleteActionProps> = ({ onDelete, children, ...props }) => {\r\n const handleDelete = () => {\r\n onDelete();\r\n };\r\n\r\n return (\r\n <Button variant=\"danger\" type=\"button\" onClick={handleDelete} startIcon={<Trashcan className=\"mtx-w-4.5 mtx-h-4.5\" />} {...props}>\r\n {children}\r\n </Button>\r\n );\r\n};\r\n\r\n/**\r\n * Props for ExtraActions.\r\n */\r\ntype ExtraActionsProps = PopoverContentProps & {\r\n /** Menu items rendered inside the popover. */\r\n children: React.ReactNode;\r\n /** Props forwarded to the popover trigger and popover root. */\r\n slotProps?: {\r\n triggerProps?: PopoverTriggerProps;\r\n popoverProps?: PopoverProps;\r\n };\r\n};\r\n\r\n/**\r\n * Extra actions menu.\r\n * Wraps overflow actions in a popover anchored to the vertical ellipsis trigger.\r\n * @param {ExtraActionsProps} props - Extra actions props.\r\n * @param {React.ReactNode} children - Menu items rendered inside the popover.\r\n * @param {{ triggerProps?: PopoverTriggerProps; popoverProps?: PopoverProps; }} [slotProps] - Props forwarded to the trigger and popover root.\r\n * @param {string} [className] - Additional popover content classes.\r\n * @returns {React.ReactElement}\r\n */\r\nconst ExtraActions: React.FC<ExtraActionsProps> = ({ children, slotProps, className, ...props }) => {\r\n return (\r\n <Popover {...(slotProps?.popoverProps ?? {})}>\r\n <PopoverTrigger {...(slotProps?.triggerProps ?? {})}>\r\n <ElipsisVertical className=\"mtx-w-4.5 mtx-h-4.5 mtx-text-primary\" />\r\n </PopoverTrigger>\r\n <PopoverContent align=\"end\" className={cn(\"mtx-w-40\", className)} {...props}>\r\n {children}\r\n </PopoverContent>\r\n </Popover>\r\n );\r\n};\r\n\r\nexport {\r\n DataGrid,\r\n DataGridContent,\r\n DataGridActionBar,\r\n SearchAction,\r\n FreezeAction,\r\n PrintAction,\r\n RefreshAction,\r\n ExtraActions,\r\n DeleteAction,\r\n type DataGridProps,\r\n type DataGridContentProps,\r\n type DatagridActionBarProps,\r\n type SearchActionProps,\r\n type FreezeActionProps,\r\n type RefreshActionProps,\r\n type ExtraActionsProps,\r\n type DeleteActionProps,\r\n useDataGrid,\r\n dataGridDefaultTheme,\r\n};\r\n"],"names":["ModuleRegistry","AllCommunityModule","dataGridDefaultTheme","themeQuartz","DataGridContext","React","useDataGrid","context","DataGrid","children","gridId","api","setApi","rowData","setRowData","actionbarHeight","setActionbarHeight","pinnedRowIds","setPinnedRowIds","quickFilterText","setQuickFilterText","actionbarExists","setActionbarExists","jsx","DataGridContent","forwardRef","propTheme","onGridReady","quickFilterTextProps","rowDataProps","containerStyle","getRowId","props","ref","theme","useMemo","handleGridReady","e","finalRowData","finalPinnedTopRowData","pinned","unpinned","data","id","stringId","AgGridReact","DataGridActionBar","className","cn","SearchAction","defaultOpen","defaultOpenAutoFocus","isSearchInputOpen","setIsSearchInputOpen","isClosing","setIsClosing","inputRef","isFirstRender","handleClear","handleOpen","handleClose","TextField","IconButton","Magnifier","CircleXmark","FreezeAction","freezeText","unFreezeText","onClick","disabled","pinnedRowCount","setPinnedRowCount","selectedRowsCount","setSelectedRowsCount","freezeRows","selectedRows","newPinnedIds","row","unfreezeRows","handleFreezing","Button","Snowflake","PrintAction","handlePrint","element","html","printHtml","Print","RefreshAction","onRefresh","loading","handleRefresh","Refresh","DeleteAction","onDelete","Trashcan","ExtraActions","slotProps","Popover","PopoverTrigger","ElipsisVertical","PopoverContent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"datagrid.es.js","sources":["../src/components/data-grid/DataGrid.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport React, { forwardRef, HTMLAttributes, useMemo } from \"react\";\r\nimport { AgGridReact, AgGridReactProps } from \"ag-grid-react\";\r\nimport { GridApi, GridReadyEvent, themeQuartz, AllCommunityModule, ModuleRegistry, Theme } from \"ag-grid-community\";\r\nimport { CircleXmark, ElipsisVertical, Magnifier, Print, Refresh, Snowflake, Trashcan } from \"@trsys-tech/matrix-icons\";\r\n\r\nimport { cn } from \"../../lib/utils\";\r\nimport { printHtml } from \"../../lib/printHtml\";\r\nimport { TextField } from \"../text-field/TextField\";\r\nimport { Button, ButtonProps } from \"../button/Button\";\r\nimport { IconButton, IconButtonProps } from \"../icon-botton/IconButton\";\r\nimport { Popover, PopoverContent, PopoverContentProps, PopoverProps, PopoverTrigger, PopoverTriggerProps } from \"../popover/Popover\";\r\n\r\n// Register all Community features\r\n// Todo: Register only the required features\r\nModuleRegistry.registerModules([AllCommunityModule]);\r\n\r\ntype DataGridRowWithId = {\r\n id?: string | number | null;\r\n};\r\n\r\ntype ResolveRowId = (data: unknown) => string | undefined;\r\n\r\n/**\r\n * Default ag-Grid theme used by DataGrid.\r\n */\r\nconst dataGridDefaultTheme = themeQuartz.withParams({\r\n fontFamily: \"DMSans\",\r\n fontSize: \"12px\",\r\n headerFontSize: \"12px\",\r\n headerFontWeight: 700,\r\n headerBackgroundColor: \"oklch(var(--mtx-primary-50))\",\r\n backgroundColor: \"oklch(var(--mtx-gray-0))\",\r\n accentColor: \"oklch(var(--mtx-primary-300))\",\r\n foregroundColor: \"oklch(var(--mtx-text-500))\",\r\n cellTextColor: \"oklch(var(--mtx-text-500))\",\r\n});\r\n\r\nconst fallbackResolveRowId: ResolveRowId = data => {\r\n const id = (data as DataGridRowWithId | null | undefined)?.id;\r\n\r\n return id !== undefined && id !== null ? String(id) : undefined;\r\n};\r\n\r\nconst createResolveRowId = (getRowId?: AgGridReactProps[\"getRowId\"]): ResolveRowId => {\r\n if (!getRowId) {\r\n return fallbackResolveRowId;\r\n }\r\n\r\n return data => {\r\n const id = getRowId({ data, level: 0 } as any);\r\n\r\n return id !== undefined && id !== null ? String(id) : fallbackResolveRowId(data);\r\n };\r\n};\r\n\r\n/**\r\n * Shared DataGrid state exposed through context.\r\n */\r\ntype DataGridContext = {\r\n api: GridApi | null;\r\n setApi: (value: GridApi) => void;\r\n rowData: any[] | null | undefined;\r\n setRowData: (value: any[] | null | undefined) => void;\r\n gridId: string;\r\n quickFilterText: string;\r\n setQuickFilterText: (value: string) => void;\r\n actionbarExists: boolean;\r\n setActionbarExists: (value: boolean) => void;\r\n actionbarHeight: number;\r\n setActionbarHeight: (value: number) => void;\r\n pinnedRowIds: Set<string>;\r\n setPinnedRowIds: (value: Set<string>) => void;\r\n resolveRowIdRef: React.MutableRefObject<ResolveRowId>;\r\n};\r\n\r\nconst DataGridContext = React.createContext<DataGridContext | null>(null);\r\n\r\n/**\r\n * Returns the current DataGrid context.\r\n */\r\nconst useDataGrid = () => {\r\n const context = React.useContext(DataGridContext);\r\n\r\n if (!context) {\r\n throw new Error(\"useDataGrid should be used within <DataGrid>\");\r\n }\r\n\r\n return context;\r\n};\r\n\r\n/**\r\n * Props for the root DataGrid provider.\r\n */\r\ntype DataGridProps = {\r\n /** Content rendered inside the provider. */\r\n children: React.ReactNode;\r\n};\r\n\r\n/**\r\n * DataGrid provider.\r\n * Provides shared state for the grid shell, content, and toolbar actions.\r\n * @param {DataGridProps} props - DataGrid props.\r\n * @param {React.ReactNode} children - Content rendered inside the provider.\r\n * @returns {React.ReactElement}\r\n */\r\nconst DataGrid: React.FC<DataGridProps> = ({ children }) => {\r\n const gridId = React.useId();\r\n const [api, setApi] = React.useState<GridApi | null>(null);\r\n const [rowData, setRowData] = React.useState<any[] | null | undefined>([]);\r\n const [actionbarHeight, setActionbarHeight] = React.useState(0);\r\n const [pinnedRowIds, setPinnedRowIds] = React.useState<Set<string>>(new Set());\r\n const resolveRowIdRef = React.useRef<ResolveRowId>(fallbackResolveRowId);\r\n\r\n const [quickFilterText, setQuickFilterText] = React.useState(\"\");\r\n const [actionbarExists, setActionbarExists] = React.useState(false);\r\n return (\r\n <DataGridContext.Provider\r\n value={{\r\n api,\r\n setApi,\r\n rowData,\r\n setRowData,\r\n gridId,\r\n quickFilterText,\r\n setQuickFilterText,\r\n actionbarExists,\r\n setActionbarExists,\r\n actionbarHeight,\r\n setActionbarHeight,\r\n pinnedRowIds,\r\n setPinnedRowIds,\r\n resolveRowIdRef,\r\n }}\r\n >\r\n {children}\r\n </DataGridContext.Provider>\r\n );\r\n};\r\n\r\n/**\r\n * Props for the Ag Grid content wrapper.\r\n */\r\ntype DataGridContentProps = Omit<AgGridReactProps, \"theme\"> & {\r\n /** Optional theme override forwarded to ag-Grid. */\r\n theme?: Theme;\r\n};\r\n\r\n/**\r\n * DataGridContent component.\r\n * Connects ag-Grid to the shared DataGrid context and keeps pinned rows separate from the main row set.\r\n * @param {DataGridContentProps} props - Ag Grid props.\r\n * @param {Theme} [theme] - Optional ag-Grid theme override.\r\n * @param {GridReadyEvent} [onGridReady] - Called when the grid becomes ready.\r\n * @param {any[] | null | undefined} [rowData] - Row data rendered by the grid.\r\n * @param {string} [quickFilterText] - Quick filter text synced from the search action.\r\n * @param {React.CSSProperties} [containerStyle] - Inline styles applied to the grid container.\r\n * @param {Function} [getRowId] - Resolves the row id used to keep pinned rows stable.\r\n * @param {React.ForwardedRef<AgGridReact>} ref - Grid ref.\r\n * @returns {React.ReactElement}\r\n */\r\nconst DataGridContent = forwardRef<AgGridReact, DataGridContentProps>(\r\n ({ theme: propTheme, onGridReady, quickFilterText: quickFilterTextProps, rowData: rowDataProps, containerStyle, getRowId, ...props }, ref) => {\r\n const context = React.useContext(DataGridContext);\r\n\r\n if (!context) {\r\n throw new Error(\"DataGridContent should be used within <DataGrid>\");\r\n }\r\n const {\r\n rowData,\r\n setRowData,\r\n actionbarExists,\r\n setApi,\r\n setQuickFilterText,\r\n quickFilterText,\r\n gridId,\r\n actionbarHeight,\r\n pinnedRowIds,\r\n resolveRowIdRef,\r\n } = context;\r\n\r\n const resolveRowId = React.useMemo(() => createResolveRowId(getRowId), [getRowId]);\r\n\r\n const theme = useMemo(() => {\r\n return dataGridDefaultTheme.withParams({\r\n headerHeight: 40,\r\n wrapperBorderRadius: actionbarExists ? \"0px 0px 8px 8px\" : \"8px\",\r\n });\r\n }, [actionbarExists]);\r\n\r\n React.useEffect(() => {\r\n resolveRowIdRef.current = resolveRowId;\r\n\r\n return () => {\r\n resolveRowIdRef.current = fallbackResolveRowId;\r\n };\r\n }, [resolveRowId, resolveRowIdRef]);\r\n\r\n const handleGridReady = (e: GridReadyEvent) => {\r\n setApi(e.api);\r\n onGridReady?.(e);\r\n };\r\n\r\n React.useEffect(() => {\r\n setRowData(rowDataProps);\r\n }, [rowDataProps, setRowData]);\r\n\r\n React.useEffect(() => {\r\n if (quickFilterTextProps !== undefined) {\r\n setQuickFilterText(quickFilterTextProps ?? \"\");\r\n }\r\n }, [quickFilterTextProps, setQuickFilterText]);\r\n\r\n const { finalRowData, finalPinnedTopRowData } = useMemo(() => {\r\n if (!rowData || pinnedRowIds.size === 0) {\r\n return { finalRowData: rowData, finalPinnedTopRowData: [] };\r\n }\r\n\r\n const pinned: any[] = [];\r\n const unpinned: any[] = [];\r\n\r\n rowData.forEach(data => {\r\n const id = resolveRowId(data);\r\n\r\n if (id !== undefined && pinnedRowIds.has(id)) {\r\n pinned.push(data);\r\n } else {\r\n unpinned.push(data);\r\n }\r\n });\r\n\r\n return { finalRowData: unpinned, finalPinnedTopRowData: pinned };\r\n }, [rowData, pinnedRowIds, resolveRowId]);\r\n\r\n return (\r\n <AgGridReact\r\n gridId={gridId}\r\n theme={propTheme ?? theme}\r\n rowData={finalRowData}\r\n pinnedTopRowData={finalPinnedTopRowData}\r\n quickFilterText={quickFilterText}\r\n onGridReady={handleGridReady}\r\n containerStyle={{ height: `calc(100% - ${actionbarHeight}px)`, ...containerStyle }}\r\n getRowId={getRowId}\r\n {...props}\r\n ref={ref}\r\n />\r\n );\r\n },\r\n);\r\n\r\nDataGridContent.displayName = \"DataGridContent\";\r\n\r\n/**\r\n * Props for the DataGrid action bar container.\r\n */\r\ntype DatagridActionBarProps = HTMLAttributes<HTMLDivElement> & {};\r\n\r\n/**\r\n * DataGrid action bar.\r\n * Marks the grid as having a toolbar so the grid can adjust border radius and height.\r\n * @param {DatagridActionBarProps} props - Action bar props.\r\n * @param {React.ReactNode} children - Action bar content.\r\n * @param {string} className - Additional classes applied to the action bar.\r\n * @returns {React.ReactElement}\r\n */\r\nconst DataGridActionBar: React.FC<DatagridActionBarProps> = ({ className, ...props }) => {\r\n const context = React.useContext(DataGridContext);\r\n\r\n if (!context) {\r\n throw new Error(\"DataGridActionBar should be used within <DataGrid>\");\r\n }\r\n const ref = React.useRef<HTMLDivElement | null>(null);\r\n const { setActionbarExists, setActionbarHeight } = context;\r\n const { children } = props;\r\n\r\n React.useEffect(() => {\r\n setActionbarExists(true);\r\n return () => setActionbarExists(false);\r\n }, [setActionbarExists]);\r\n\r\n React.useEffect(() => {\r\n if (ref.current) {\r\n setActionbarHeight(ref.current.clientHeight);\r\n }\r\n }, [setActionbarHeight]);\r\n\r\n return (\r\n <div\r\n className={cn(\r\n \"mtx-relative mtx-flex mtx-items-center mtx-p-2 mtx-h-12 mtx-w-full mtx-bg-gray-0 mtx-border mtx-border-gray-200 mtx-border-b-0 -mtx-mb-[1px] mtx-z-10 mtx-rounded-t-[8px]\",\r\n className,\r\n )}\r\n ref={ref}\r\n >\r\n {children}\r\n </div>\r\n );\r\n};\r\n\r\n/**\r\n * Props for SearchAction.\r\n */\r\ntype SearchActionProps = HTMLAttributes<HTMLDivElement> & {\r\n /** Opens the search input immediately on mount. */\r\n defaultOpen?: boolean;\r\n /** Focuses the input the first time it opens. */\r\n defaultOpenAutoFocus?: boolean;\r\n};\r\n\r\n/**\r\n * Search action.\r\n * Toggles the quick filter input and manages its open/close focus behavior.\r\n * @param {SearchActionProps} props - Search action props.\r\n * @param {boolean} [defaultOpen] - Opens the search input immediately on mount.\r\n * @param {boolean} [defaultOpenAutoFocus] - Focuses the input the first time it opens.\r\n * @param {React.ReactNode} children - Optional wrapper content.\r\n * @param {string} className - Additional wrapper classes.\r\n * @returns {React.ReactElement}\r\n */\r\nconst SearchAction: React.FC<SearchActionProps> = ({\r\n defaultOpen = false,\r\n defaultOpenAutoFocus = true,\r\n className,\r\n ...props\r\n}: SearchActionProps): React.ReactElement => {\r\n const context = React.useContext(DataGridContext);\r\n\r\n if (!context) {\r\n throw new Error(\"SearchAction should be used within <DataGrid>\");\r\n }\r\n\r\n const { quickFilterText, setQuickFilterText } = context;\r\n\r\n const [isSearchInputOpen, setIsSearchInputOpen] = React.useState(defaultOpen);\r\n const [isClosing, setIsClosing] = React.useState(false);\r\n const inputRef = React.useRef<HTMLInputElement | null>(null);\r\n const isFirstRender = React.useRef(true);\r\n\r\n const handleClear = () => {\r\n context.setQuickFilterText(\"\");\r\n if (inputRef.current) {\r\n inputRef.current.focus();\r\n }\r\n };\r\n\r\n const handleOpen = () => {\r\n setIsSearchInputOpen(true);\r\n };\r\n\r\n React.useEffect(() => {\r\n if (isSearchInputOpen && inputRef?.current && (defaultOpenAutoFocus || !isFirstRender.current)) {\r\n inputRef.current.focus();\r\n }\r\n isFirstRender.current = false;\r\n }, [isSearchInputOpen, defaultOpenAutoFocus]);\r\n\r\n const handleClose = () => {\r\n setIsClosing(true);\r\n context.setQuickFilterText(\"\");\r\n setTimeout(() => {\r\n setIsSearchInputOpen(false);\r\n setIsClosing(false);\r\n }, 200);\r\n };\r\n\r\n return (\r\n <div className={cn(\"mtx-max-w-60\", className)} {...props}>\r\n {isSearchInputOpen || isClosing ? (\r\n <TextField\r\n ref={inputRef}\r\n className={cn(\r\n \"mtx-relative mtx-h-7.5\",\r\n isSearchInputOpen && !isClosing ? \"mtx-animate-input-open\" : \"\",\r\n isClosing && \"mtx-animate-input-close\",\r\n )}\r\n onChange={e => setQuickFilterText(e.target.value)}\r\n value={quickFilterText}\r\n startAdornment={\r\n <IconButton variant=\"toolbar\" type=\"button\" className=\"mtx-p-0.5 mtx-h-6 mtx-w-6 mtx-border-none mtx-mx-1\" onClick={handleClose}>\r\n <Magnifier className=\"mtx-w-5 mtx-h-5\" />\r\n </IconButton>\r\n }\r\n endAdornment={\r\n quickFilterText && (\r\n <IconButton variant=\"toolbar\" type=\"button\" className=\"mtx-p-0.5 mtx-w-6 mtx-h-6 mtx-border-none mtx-mx-1\" onClick={handleClear}>\r\n <CircleXmark className=\"mtx-w-5 mtx-h-5\" />\r\n </IconButton>\r\n )\r\n }\r\n />\r\n ) : (\r\n <IconButton variant=\"toolbar\" type=\"button\" className=\"mtx-p-0.5 mtx-w-6 mtx-h-6 mtx-m-1\" onClick={handleOpen}>\r\n <Magnifier className=\"mtx-w-5 mtx-h-5\" />\r\n </IconButton>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\n/**\r\n * Props for FreezeAction.\r\n */\r\ntype FreezeActionProps = ButtonProps & {\r\n /** Label shown when rows can be frozen. */\r\n freezeText?: string;\r\n /** Label shown when rows are already frozen. */\r\n unFreezeText?: string;\r\n};\r\n\r\n/**\r\n * Freeze action.\r\n * Pins the current selection when rows are selected, or clears pinned rows when the grid is already frozen.\r\n * @param {FreezeActionProps} props - Freeze action props.\r\n * @param {boolean} [disabled] - Disables the action button.\r\n * @param {React.MouseEventHandler<HTMLButtonElement>} [onClick] - Called after the freeze toggle runs.\r\n * @returns {React.ReactElement}\r\n */\r\nconst FreezeAction: React.FC<FreezeActionProps> = ({\r\n freezeText,\r\n unFreezeText,\r\n onClick,\r\n disabled,\r\n ...props\r\n}: FreezeActionProps): React.ReactElement => {\r\n const context = React.useContext(DataGridContext);\r\n\r\n if (!context) {\r\n throw new Error(\"FreezeAction should be used within <DataGrid>\");\r\n }\r\n\r\n const [pinnedRowCount, setPinnedRowCount] = React.useState(0);\r\n const [selectedRowsCount, setSelectedRowsCount] = React.useState(0);\r\n\r\n const { api, pinnedRowIds, setPinnedRowIds, resolveRowIdRef } = context;\r\n\r\n const freezeRows = () => {\r\n if (!api) return;\r\n\r\n // Get currently selected rows\r\n const selectedRows = api.getSelectedRows();\r\n\r\n if (selectedRows.length > 0) {\r\n const newPinnedIds = new Set(pinnedRowIds);\r\n selectedRows.forEach(row => {\r\n const rowId = resolveRowIdRef.current(row);\r\n\r\n if (rowId !== undefined) {\r\n newPinnedIds.add(rowId);\r\n }\r\n });\r\n setPinnedRowIds(newPinnedIds);\r\n api.deselectAll();\r\n }\r\n };\r\n\r\n const unfreezeRows = () => {\r\n setPinnedRowIds(new Set());\r\n };\r\n\r\n const handleFreezing = (e: React.MouseEvent<HTMLButtonElement>) => {\r\n if (api) {\r\n const pinnedRowsCount = api.getPinnedTopRowCount();\r\n if (pinnedRowsCount > 0) {\r\n unfreezeRows();\r\n } else {\r\n freezeRows();\r\n }\r\n }\r\n onClick?.(e);\r\n };\r\n\r\n React.useEffect(() => {\r\n api?.addEventListener(\"pinnedRowDataChanged\", () => {\r\n setPinnedRowCount(api.getPinnedTopRowCount());\r\n });\r\n\r\n api?.addEventListener(\"selectionChanged\", () => {\r\n setSelectedRowsCount(api.getSelectedNodes().length);\r\n });\r\n\r\n return () => {\r\n if (api?.isDestroyed()) return;\r\n api?.removeEventListener(\"pinnedRowDataChanged\", () => {\r\n setPinnedRowCount(api.getPinnedTopRowCount());\r\n });\r\n\r\n api?.removeEventListener(\"selectionChanged\", () => {\r\n setSelectedRowsCount(api.getSelectedNodes().length);\r\n });\r\n };\r\n }, [api]);\r\n\r\n return (\r\n <Button\r\n variant=\"text\"\r\n onClick={handleFreezing}\r\n startIcon={<Snowflake className=\"mtx-w-4.5 mtx-h-4.5\" />}\r\n disabled={(!pinnedRowCount && !selectedRowsCount) || disabled}\r\n type=\"button\"\r\n {...props}\r\n >\r\n {pinnedRowCount ? (unFreezeText ?? \"Unfreeze\") : (freezeText ?? \"Freeze\")}\r\n </Button>\r\n );\r\n};\r\n\r\n/**\r\n * Props for PrintAction.\r\n */\r\ntype PrintActionProps = IconButtonProps & {};\r\n\r\n/**\r\n * Print action.\r\n * Switches the grid to print layout, captures the rendered markup, and opens the browser print flow.\r\n * @param {PrintActionProps} props - Print action props.\r\n * @param {React.ReactNode} [children] - Custom icon content rendered in the button.\r\n * @param {string} [className] - Additional button classes.\r\n * @param {React.MouseEventHandler<HTMLButtonElement>} [onClick] - Called after printing is triggered.\r\n * @returns {React.ReactElement}\r\n */\r\nconst PrintAction: React.FC<PrintActionProps> = ({ children, className, onClick, ...props }) => {\r\n const context = React.useContext(DataGridContext);\r\n\r\n if (!context) {\r\n throw new Error(\"PrintAction should be used within <DataGrid>\");\r\n }\r\n\r\n const handlePrint = (e: React.MouseEvent<HTMLButtonElement>) => {\r\n if (context.api) {\r\n context.api.setGridOption(\"domLayout\", \"print\");\r\n\r\n setTimeout(() => {\r\n const element = document.querySelector(\"[grid-id='\" + context.gridId + \"']\") as HTMLElement;\r\n const header = document.head;\r\n const html = `<html>\r\n ${header.innerHTML}\r\n ${element.outerHTML}\r\n </html>`;\r\n printHtml(html);\r\n context?.api?.setGridOption(\"domLayout\", undefined);\r\n });\r\n }\r\n onClick?.(e);\r\n };\r\n\r\n return (\r\n <IconButton variant=\"toolbar\" type=\"button\" className={cn(\"mtx-p-0.5 mtx-w-6 mtx-h-6\", className)} onClick={handlePrint} {...props}>\r\n {children ?? <Print className=\"mtx-w-5 mtx-h-5\" />}\r\n </IconButton>\r\n );\r\n};\r\n\r\n/**\r\n * Props for RefreshAction.\r\n */\r\ntype RefreshActionProps = Omit<IconButtonProps, \"onClick\"> & {\r\n /** Callback invoked when the refresh action is clicked. */\r\n onRefresh: () => void;\r\n};\r\n\r\n/**\r\n * Refresh action.\r\n * Calls the provided refresh callback and reflects the loading state in the toolbar button.\r\n * @param {RefreshActionProps} props - Refresh action props.\r\n * @param {() => void} onRefresh - Called when the button is clicked.\r\n * @param {boolean} [loading] - Shows the loading spinner and disables the button.\r\n * @param {React.ReactNode} [children] - Custom icon content rendered in the button.\r\n * @param {string} [className] - Additional button classes.\r\n * @returns {React.ReactElement}\r\n */\r\nconst RefreshAction: React.FC<RefreshActionProps> = ({ className, onRefresh, children, loading, ...props }) => {\r\n const context = React.useContext(DataGridContext);\r\n\r\n if (!context) {\r\n throw new Error(\"RefreshAction should be used within <DataGrid>\");\r\n }\r\n\r\n const handleRefresh = () => {\r\n onRefresh();\r\n };\r\n\r\n return (\r\n <IconButton\r\n className={cn(\"mtx-p-0.5 mtx-w-6 mtx-h-6\", loading && \"disabled:mtx-bg-transparent\", className)}\r\n variant=\"toolbar\"\r\n type=\"button\"\r\n onClick={handleRefresh}\r\n disabled={loading}\r\n {...props}\r\n >\r\n {children ?? <Refresh className={cn(\"mtx-w-4.5 mtx-h-4.5\", loading && \"mtx-animate-spin\")} />}\r\n </IconButton>\r\n );\r\n};\r\n\r\n/**\r\n * Props for DeleteAction.\r\n */\r\ntype DeleteActionProps = Omit<ButtonProps, \"onClick\"> & {\r\n /** Callback invoked when the delete action is clicked. */\r\n onDelete: () => void;\r\n};\r\n\r\n/**\r\n * Delete action.\r\n * Renders a danger button with the delete icon and delegates the click to the provided handler.\r\n * @param {DeleteActionProps} props - Delete action props.\r\n * @param {() => void} onDelete - Called when the button is clicked.\r\n * @param {React.ReactNode} [children] - Button label or custom content.\r\n * @returns {React.ReactElement}\r\n */\r\nconst DeleteAction: React.FC<DeleteActionProps> = ({ onDelete, children, ...props }) => {\r\n const handleDelete = () => {\r\n onDelete();\r\n };\r\n\r\n return (\r\n <Button variant=\"danger\" type=\"button\" onClick={handleDelete} startIcon={<Trashcan className=\"mtx-w-4.5 mtx-h-4.5\" />} {...props}>\r\n {children}\r\n </Button>\r\n );\r\n};\r\n\r\n/**\r\n * Props for ExtraActions.\r\n */\r\ntype ExtraActionsProps = PopoverContentProps & {\r\n /** Menu items rendered inside the popover. */\r\n children: React.ReactNode;\r\n /** Props forwarded to the popover trigger and popover root. */\r\n slotProps?: {\r\n triggerProps?: PopoverTriggerProps;\r\n popoverProps?: PopoverProps;\r\n };\r\n};\r\n\r\n/**\r\n * Extra actions menu.\r\n * Wraps overflow actions in a popover anchored to the vertical ellipsis trigger.\r\n * @param {ExtraActionsProps} props - Extra actions props.\r\n * @param {React.ReactNode} children - Menu items rendered inside the popover.\r\n * @param {{ triggerProps?: PopoverTriggerProps; popoverProps?: PopoverProps; }} [slotProps] - Props forwarded to the trigger and popover root.\r\n * @param {string} [className] - Additional popover content classes.\r\n * @returns {React.ReactElement}\r\n */\r\nconst ExtraActions: React.FC<ExtraActionsProps> = ({ children, slotProps, className, ...props }) => {\r\n return (\r\n <Popover {...(slotProps?.popoverProps ?? {})}>\r\n <PopoverTrigger {...(slotProps?.triggerProps ?? {})}>\r\n <ElipsisVertical className=\"mtx-w-4.5 mtx-h-4.5 mtx-text-primary\" />\r\n </PopoverTrigger>\r\n <PopoverContent align=\"end\" className={cn(\"mtx-w-40\", className)} {...props}>\r\n {children}\r\n </PopoverContent>\r\n </Popover>\r\n );\r\n};\r\n\r\nexport {\r\n DataGrid,\r\n DataGridContent,\r\n DataGridActionBar,\r\n SearchAction,\r\n FreezeAction,\r\n PrintAction,\r\n RefreshAction,\r\n ExtraActions,\r\n DeleteAction,\r\n type DataGridProps,\r\n type DataGridContentProps,\r\n type DatagridActionBarProps,\r\n type SearchActionProps,\r\n type FreezeActionProps,\r\n type RefreshActionProps,\r\n type ExtraActionsProps,\r\n type DeleteActionProps,\r\n useDataGrid,\r\n dataGridDefaultTheme,\r\n};\r\n"],"names":["ModuleRegistry","AllCommunityModule","dataGridDefaultTheme","themeQuartz","fallbackResolveRowId","data","id","createResolveRowId","getRowId","DataGridContext","React","useDataGrid","context","DataGrid","children","gridId","api","setApi","rowData","setRowData","actionbarHeight","setActionbarHeight","pinnedRowIds","setPinnedRowIds","resolveRowIdRef","quickFilterText","setQuickFilterText","actionbarExists","setActionbarExists","jsx","DataGridContent","forwardRef","propTheme","onGridReady","quickFilterTextProps","rowDataProps","containerStyle","props","ref","resolveRowId","theme","useMemo","handleGridReady","e","finalRowData","finalPinnedTopRowData","pinned","unpinned","AgGridReact","DataGridActionBar","className","cn","SearchAction","defaultOpen","defaultOpenAutoFocus","isSearchInputOpen","setIsSearchInputOpen","isClosing","setIsClosing","inputRef","isFirstRender","handleClear","handleOpen","handleClose","TextField","IconButton","Magnifier","CircleXmark","FreezeAction","freezeText","unFreezeText","onClick","disabled","pinnedRowCount","setPinnedRowCount","selectedRowsCount","setSelectedRowsCount","freezeRows","selectedRows","newPinnedIds","row","rowId","unfreezeRows","handleFreezing","Button","Snowflake","PrintAction","handlePrint","element","html","printHtml","Print","RefreshAction","onRefresh","loading","handleRefresh","Refresh","DeleteAction","onDelete","Trashcan","ExtraActions","slotProps","Popover","PopoverTrigger","ElipsisVertical","PopoverContent"],"mappings":"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"}
|
|
@@ -1,61 +1,64 @@
|
|
|
1
1
|
import { jsxs as o, jsx as e } from "react/jsx-runtime";
|
|
2
|
-
import * as
|
|
3
|
-
import { Calendar as
|
|
4
|
-
import { cn as
|
|
5
|
-
import { Calendar as
|
|
6
|
-
import { Button as
|
|
7
|
-
import { Popover as
|
|
2
|
+
import * as g from "react";
|
|
3
|
+
import { Calendar as w } from "@trsys-tech/matrix-icons";
|
|
4
|
+
import { cn as v } from "./utils.es.js";
|
|
5
|
+
import { Calendar as C } from "./calendar.es.js";
|
|
6
|
+
import { Button as k } from "./button.es.js";
|
|
7
|
+
import { Popover as D, PopoverTrigger as M, PopoverContent as P } from "./popover.es.js";
|
|
8
8
|
import { format as m } from "./format.es.js";
|
|
9
|
-
const
|
|
9
|
+
const L = ({
|
|
10
10
|
formatStr: r,
|
|
11
11
|
selected: t,
|
|
12
12
|
placeholder: n,
|
|
13
|
-
className:
|
|
14
|
-
calendarClassName:
|
|
13
|
+
className: d,
|
|
14
|
+
calendarClassName: i,
|
|
15
15
|
closeOnSelect: s = !0,
|
|
16
|
-
onDayClick:
|
|
16
|
+
onDayClick: x,
|
|
17
17
|
disabled: p,
|
|
18
|
-
|
|
18
|
+
disabledDates: l,
|
|
19
|
+
...c
|
|
19
20
|
}) => {
|
|
20
|
-
const [
|
|
21
|
-
|
|
21
|
+
const [u, a] = g.useState(!1), f = (b, y, h) => {
|
|
22
|
+
x?.(b, y, h), s && a(!1);
|
|
22
23
|
};
|
|
23
|
-
return /* @__PURE__ */ o(
|
|
24
|
-
/* @__PURE__ */ e(
|
|
25
|
-
|
|
24
|
+
return /* @__PURE__ */ o(D, { open: u, onOpenChange: a, children: [
|
|
25
|
+
/* @__PURE__ */ e(M, { asChild: !0, children: /* @__PURE__ */ o(
|
|
26
|
+
k,
|
|
26
27
|
{
|
|
27
28
|
variant: "text",
|
|
28
|
-
className:
|
|
29
|
+
className: v(
|
|
29
30
|
"mtx-flex mtx-h-8 mtx-w-full mtx-items-center mtx-justify-between mtx-whitespace-nowrap mtx-rounded-sm mtx-border mtx-border-input mtx-bg-transparent mtx-ps-3 mtx-pe-1 mtx-py-1.5 mtx-text-xs mtx-ring-offset-background data-[placeholder]:mtx-text-muted-foreground hover:mtx-border hover:mtx-border-primary hover:mtx-bg-transparent focus:mtx-border focus:mtx-border-primary focus:mtx-outline-none focus:mtx-ring focus:mtx-ring-primary-100 disabled:mtx-cursor-not-allowed disabled:mtx-bg-gray-100 disabled:mtx-text-text-300 disabled:mtx-border-gray-100 [&>span]:mtx-line-clamp-1 [&_svg]:disabled:mtx-text-text-300",
|
|
30
|
-
|
|
31
|
+
d
|
|
31
32
|
),
|
|
32
33
|
"data-placeholder": t ? void 0 : "",
|
|
33
34
|
"aria-label": t ? `Selected date: ${m(t, r ?? "yyyy/MM/dd")}` : "Pick a date",
|
|
34
35
|
disabled: p,
|
|
36
|
+
"aria-haspopup": "dialog",
|
|
35
37
|
type: "button",
|
|
36
38
|
children: [
|
|
37
39
|
t ? m(t, r ?? "yyyy/MM/dd") : /* @__PURE__ */ e("span", { children: n ?? "Pick a date" }),
|
|
38
|
-
/* @__PURE__ */ e(
|
|
40
|
+
/* @__PURE__ */ e(w, { className: "mtx-mr-2 mtx-ms-auto" })
|
|
39
41
|
]
|
|
40
42
|
}
|
|
41
43
|
) }),
|
|
42
|
-
/* @__PURE__ */ e(
|
|
43
|
-
|
|
44
|
+
/* @__PURE__ */ e(P, { className: "mtx-w-auto mtx-p-0", children: /* @__PURE__ */ e(
|
|
45
|
+
C,
|
|
44
46
|
{
|
|
45
47
|
defaultMonth: t,
|
|
46
48
|
startMonth: new Date(2e3, 0, 1),
|
|
47
49
|
endMonth: new Date((/* @__PURE__ */ new Date()).getFullYear() + 2, 11, 31),
|
|
48
|
-
...
|
|
50
|
+
...c,
|
|
49
51
|
mode: "single",
|
|
50
52
|
selected: t,
|
|
51
53
|
captionLayout: "dropdown-years",
|
|
52
|
-
className:
|
|
53
|
-
onDayClick:
|
|
54
|
+
className: i,
|
|
55
|
+
onDayClick: f,
|
|
56
|
+
disabled: l
|
|
54
57
|
}
|
|
55
58
|
) })
|
|
56
59
|
] });
|
|
57
60
|
};
|
|
58
61
|
export {
|
|
59
|
-
|
|
62
|
+
L as DesktopDatePicker
|
|
60
63
|
};
|
|
61
64
|
//# sourceMappingURL=desktopdatepicker.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"desktopdatepicker.es.js","sources":["../src/components/date-picker/DesktopDatePicker.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport * as React from \"react\";\r\nimport { format } from \"date-fns\";\r\nimport { Calendar as CalendarIcon } from \"@trsys-tech/matrix-icons\";\r\nimport { PropsBase, PropsSingle, DayEventHandler } from \"react-day-picker\";\r\n\r\nimport { cn } from \"../../lib/utils\";\r\nimport { Calendar } from \"./calendar\";\r\nimport { Button } from \"../button/Button\";\r\nimport { Popover, PopoverContent, PopoverTrigger } from \"../popover/Popover\";\r\n\r\ntype DesktopDatePickerProps = PropsBase &\r\n Omit<PropsSingle, \"mode\"> & {\r\n formatStr?: string;\r\n placeholder?: string;\r\n calendarClassName?: string;\r\n selected?: Date;\r\n required?: boolean;\r\n closeOnSelect?: boolean;\r\n disabled?: boolean;\r\n };\r\n\r\nconst DesktopDatePicker: React.FC<DesktopDatePickerProps> = ({\r\n formatStr,\r\n selected,\r\n placeholder,\r\n className,\r\n calendarClassName,\r\n closeOnSelect = true,\r\n onDayClick,\r\n disabled,\r\n ...props\r\n}) => {\r\n const [isOpen, setIsOpen] = React.useState(false);\r\n\r\n const handleDayClick: DayEventHandler<React.MouseEvent<Element, MouseEvent>> = (date, modifiers, e) => {\r\n onDayClick?.(date, modifiers, e);\r\n if (closeOnSelect) setIsOpen(false);\r\n };\r\n\r\n return (\r\n <Popover open={isOpen} onOpenChange={setIsOpen}>\r\n <PopoverTrigger asChild>\r\n <Button\r\n variant=\"text\"\r\n className={cn(\r\n \"mtx-flex mtx-h-8 mtx-w-full mtx-items-center mtx-justify-between mtx-whitespace-nowrap mtx-rounded-sm mtx-border mtx-border-input mtx-bg-transparent mtx-ps-3 mtx-pe-1 mtx-py-1.5 mtx-text-xs mtx-ring-offset-background data-[placeholder]:mtx-text-muted-foreground hover:mtx-border hover:mtx-border-primary hover:mtx-bg-transparent focus:mtx-border focus:mtx-border-primary focus:mtx-outline-none focus:mtx-ring focus:mtx-ring-primary-100 disabled:mtx-cursor-not-allowed disabled:mtx-bg-gray-100 disabled:mtx-text-text-300 disabled:mtx-border-gray-100 [&>span]:mtx-line-clamp-1 [&_svg]:disabled:mtx-text-text-300\",\r\n className,\r\n )}\r\n data-placeholder={!selected ? \"\" : undefined}\r\n aria-label={selected ? `Selected date: ${format(selected, formatStr ?? \"yyyy/MM/dd\")}` : \"Pick a date\"}\r\n disabled={disabled}\r\n type=\"button\"\r\n >\r\n {selected ? format(selected, formatStr ?? \"yyyy/MM/dd\") : <span>{placeholder ?? \"Pick a date\"}</span>}\r\n <CalendarIcon className=\"mtx-mr-2 mtx-ms-auto\" />\r\n </Button>\r\n </PopoverTrigger>\r\n <PopoverContent className=\"mtx-w-auto mtx-p-0\">\r\n <Calendar\r\n defaultMonth={selected}\r\n startMonth={new Date(2000, 0, 1)}\r\n endMonth={new Date(new Date().getFullYear() + 2, 11, 31)}\r\n {...props}\r\n mode=\"single\"\r\n selected={selected}\r\n captionLayout=\"dropdown-years\"\r\n className={calendarClassName}\r\n onDayClick={handleDayClick}\r\n />\r\n </PopoverContent>\r\n </Popover>\r\n );\r\n};\r\n\r\nexport { DesktopDatePicker, type DesktopDatePickerProps };\r\n"],"names":["DesktopDatePicker","formatStr","selected","placeholder","className","calendarClassName","closeOnSelect","onDayClick","disabled","props","isOpen","setIsOpen","React","handleDayClick","date","modifiers","e","jsxs","Popover","jsx","PopoverTrigger","Button","cn","format","CalendarIcon","PopoverContent","Calendar"],"mappings":";;;;;;;;
|
|
1
|
+
{"version":3,"file":"desktopdatepicker.es.js","sources":["../src/components/date-picker/DesktopDatePicker.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport * as React from \"react\";\r\nimport { format } from \"date-fns\";\r\nimport { Calendar as CalendarIcon } from \"@trsys-tech/matrix-icons\";\r\nimport { PropsBase, PropsSingle, DayEventHandler, Matcher } from \"react-day-picker\";\r\n\r\nimport { cn } from \"../../lib/utils\";\r\nimport { Calendar } from \"./calendar\";\r\nimport { Button } from \"../button/Button\";\r\nimport { Popover, PopoverContent, PopoverTrigger } from \"../popover/Popover\";\r\n\r\ntype DesktopDatePickerProps = Omit<PropsBase, \"disabled\"> &\r\n Omit<PropsSingle, \"mode\" | \"disabled\"> & {\r\n formatStr?: string;\r\n placeholder?: string;\r\n calendarClassName?: string;\r\n selected?: Date;\r\n required?: boolean;\r\n closeOnSelect?: boolean;\r\n disabled?: boolean;\r\n disabledDates?: Matcher | Matcher[];\r\n };\r\n\r\nconst DesktopDatePicker: React.FC<DesktopDatePickerProps> = ({\r\n formatStr,\r\n selected,\r\n placeholder,\r\n className,\r\n calendarClassName,\r\n closeOnSelect = true,\r\n onDayClick,\r\n disabled,\r\n disabledDates,\r\n ...props\r\n}) => {\r\n const [isOpen, setIsOpen] = React.useState(false);\r\n\r\n const handleDayClick: DayEventHandler<React.MouseEvent<Element, MouseEvent>> = (date, modifiers, e) => {\r\n onDayClick?.(date, modifiers, e);\r\n if (closeOnSelect) setIsOpen(false);\r\n };\r\n\r\n return (\r\n <Popover open={isOpen} onOpenChange={setIsOpen}>\r\n <PopoverTrigger asChild>\r\n <Button\r\n variant=\"text\"\r\n className={cn(\r\n \"mtx-flex mtx-h-8 mtx-w-full mtx-items-center mtx-justify-between mtx-whitespace-nowrap mtx-rounded-sm mtx-border mtx-border-input mtx-bg-transparent mtx-ps-3 mtx-pe-1 mtx-py-1.5 mtx-text-xs mtx-ring-offset-background data-[placeholder]:mtx-text-muted-foreground hover:mtx-border hover:mtx-border-primary hover:mtx-bg-transparent focus:mtx-border focus:mtx-border-primary focus:mtx-outline-none focus:mtx-ring focus:mtx-ring-primary-100 disabled:mtx-cursor-not-allowed disabled:mtx-bg-gray-100 disabled:mtx-text-text-300 disabled:mtx-border-gray-100 [&>span]:mtx-line-clamp-1 [&_svg]:disabled:mtx-text-text-300\",\r\n className,\r\n )}\r\n data-placeholder={!selected ? \"\" : undefined}\r\n aria-label={selected ? `Selected date: ${format(selected, formatStr ?? \"yyyy/MM/dd\")}` : \"Pick a date\"}\r\n disabled={disabled}\r\n aria-haspopup=\"dialog\"\r\n type=\"button\"\r\n >\r\n {selected ? format(selected, formatStr ?? \"yyyy/MM/dd\") : <span>{placeholder ?? \"Pick a date\"}</span>}\r\n <CalendarIcon className=\"mtx-mr-2 mtx-ms-auto\" />\r\n </Button>\r\n </PopoverTrigger>\r\n <PopoverContent className=\"mtx-w-auto mtx-p-0\">\r\n <Calendar\r\n defaultMonth={selected}\r\n startMonth={new Date(2000, 0, 1)}\r\n endMonth={new Date(new Date().getFullYear() + 2, 11, 31)}\r\n {...props}\r\n mode=\"single\"\r\n selected={selected}\r\n captionLayout=\"dropdown-years\"\r\n className={calendarClassName}\r\n onDayClick={handleDayClick}\r\n disabled={disabledDates}\r\n />\r\n </PopoverContent>\r\n </Popover>\r\n );\r\n};\r\n\r\nexport { DesktopDatePicker, type DesktopDatePickerProps };\r\n"],"names":["DesktopDatePicker","formatStr","selected","placeholder","className","calendarClassName","closeOnSelect","onDayClick","disabled","disabledDates","props","isOpen","setIsOpen","React","handleDayClick","date","modifiers","e","jsxs","Popover","jsx","PopoverTrigger","Button","cn","format","CalendarIcon","PopoverContent","Calendar"],"mappings":";;;;;;;;AAwBA,MAAMA,IAAsD,CAAC;AAAA,EAC3D,WAAAC;AAAA,EACA,UAAAC;AAAA,EACA,aAAAC;AAAA,EACA,WAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,eAAAC,IAAgB;AAAA,EAChB,YAAAC;AAAA,EACA,UAAAC;AAAA,EACA,eAAAC;AAAA,EACA,GAAGC;AACL,MAAM;AACJ,QAAM,CAACC,GAAQC,CAAS,IAAIC,EAAM,SAAS,EAAK,GAE1CC,IAAyE,CAACC,GAAMC,GAAWC,MAAM;AACrG,IAAAV,IAAaQ,GAAMC,GAAWC,CAAC,GAC3BX,OAAyB,EAAK;AAAA,EACpC;AAEA,SACE,gBAAAY,EAACC,GAAA,EAAQ,MAAMR,GAAQ,cAAcC,GACnC,UAAA;AAAA,IAAA,gBAAAQ,EAACC,GAAA,EAAe,SAAO,IACrB,UAAA,gBAAAH;AAAA,MAACI;AAAA,MAAA;AAAA,QACC,SAAQ;AAAA,QACR,WAAWC;AAAA,UACT;AAAA,UACAnB;AAAA,QAAA;AAAA,QAEF,oBAAmBF,IAAgB,SAAL;AAAA,QAC9B,cAAYA,IAAW,kBAAkBsB,EAAOtB,GAAUD,KAAa,YAAY,CAAC,KAAK;AAAA,QACzF,UAAAO;AAAA,QACA,iBAAc;AAAA,QACd,MAAK;AAAA,QAEJ,UAAA;AAAA,UAAAN,IAAWsB,EAAOtB,GAAUD,KAAa,YAAY,IAAI,gBAAAmB,EAAC,QAAA,EAAM,eAAe,cAAA,CAAc;AAAA,UAC9F,gBAAAA,EAACK,GAAA,EAAa,WAAU,uBAAA,CAAuB;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA,GAEnD;AAAA,IACA,gBAAAL,EAACM,GAAA,EAAe,WAAU,sBACxB,UAAA,gBAAAN;AAAA,MAACO;AAAAA,MAAA;AAAA,QACC,cAAczB;AAAA,QACd,YAAY,IAAI,KAAK,KAAM,GAAG,CAAC;AAAA,QAC/B,UAAU,IAAI,MAAK,oBAAI,KAAA,GAAO,gBAAgB,GAAG,IAAI,EAAE;AAAA,QACtD,GAAGQ;AAAA,QACJ,MAAK;AAAA,QACL,UAAAR;AAAA,QACA,eAAc;AAAA,QACd,WAAWG;AAAA,QACX,YAAYS;AAAA,QACZ,UAAUL;AAAA,MAAA;AAAA,IAAA,EACZ,CACF;AAAA,EAAA,GACF;AAEJ;"}
|
|
@@ -2,11 +2,11 @@ import { jsxs as r, jsx as m } from "react/jsx-runtime";
|
|
|
2
2
|
import * as g from "react";
|
|
3
3
|
import { Calendar as h } from "@trsys-tech/matrix-icons";
|
|
4
4
|
import { cn as n } from "./utils.es.js";
|
|
5
|
-
import { Calendar as
|
|
6
|
-
import { Button as
|
|
7
|
-
import { Popover as
|
|
5
|
+
import { Calendar as c } from "./calendar.es.js";
|
|
6
|
+
import { Button as w } from "./button.es.js";
|
|
7
|
+
import { Popover as M, PopoverTrigger as v, PopoverContent as C } from "./popover.es.js";
|
|
8
8
|
import { format as a } from "./format.es.js";
|
|
9
|
-
const
|
|
9
|
+
const $ = ({
|
|
10
10
|
formatStr: o,
|
|
11
11
|
selected: t,
|
|
12
12
|
placeholder: e,
|
|
@@ -15,19 +15,20 @@ const R = ({
|
|
|
15
15
|
fromText: d,
|
|
16
16
|
toText: s,
|
|
17
17
|
disabled: p,
|
|
18
|
-
|
|
18
|
+
disabledDates: l,
|
|
19
|
+
...f
|
|
19
20
|
}) => {
|
|
20
|
-
const [
|
|
21
|
+
const [u, y] = g.useState(!1);
|
|
21
22
|
return /* @__PURE__ */ r(
|
|
22
|
-
|
|
23
|
+
M,
|
|
23
24
|
{
|
|
24
|
-
open:
|
|
25
|
-
onOpenChange: (
|
|
26
|
-
|
|
25
|
+
open: u,
|
|
26
|
+
onOpenChange: (b) => {
|
|
27
|
+
y(b);
|
|
27
28
|
},
|
|
28
29
|
children: [
|
|
29
|
-
/* @__PURE__ */ m(
|
|
30
|
-
|
|
30
|
+
/* @__PURE__ */ m(v, { asChild: !0, children: /* @__PURE__ */ r(
|
|
31
|
+
w,
|
|
31
32
|
{
|
|
32
33
|
variant: "text",
|
|
33
34
|
className: n(
|
|
@@ -56,17 +57,18 @@ const R = ({
|
|
|
56
57
|
]
|
|
57
58
|
}
|
|
58
59
|
) }),
|
|
59
|
-
/* @__PURE__ */ m(
|
|
60
|
-
|
|
60
|
+
/* @__PURE__ */ m(C, { className: "mtx-w-auto mtx-p-0", align: "start", children: /* @__PURE__ */ m(
|
|
61
|
+
c,
|
|
61
62
|
{
|
|
62
63
|
defaultMonth: t?.from,
|
|
63
64
|
startMonth: new Date(2e3, 0, 1),
|
|
64
65
|
endMonth: new Date((/* @__PURE__ */ new Date()).getFullYear() + 2, 11, 31),
|
|
65
|
-
...
|
|
66
|
+
...f,
|
|
66
67
|
mode: "range",
|
|
67
68
|
selected: t,
|
|
68
69
|
className: n(i, "md:mtx-max-w-full md:mtx-w-[36rem]"),
|
|
69
|
-
numberOfMonths: 2
|
|
70
|
+
numberOfMonths: 2,
|
|
71
|
+
disabled: l
|
|
70
72
|
}
|
|
71
73
|
) })
|
|
72
74
|
]
|
|
@@ -74,6 +76,6 @@ const R = ({
|
|
|
74
76
|
);
|
|
75
77
|
};
|
|
76
78
|
export {
|
|
77
|
-
|
|
79
|
+
$ as DesktopDateRangePicker
|
|
78
80
|
};
|
|
79
81
|
//# sourceMappingURL=desktopdaterangepicker.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"desktopdaterangepicker.es.js","sources":["../src/components/date-picker/DesktopDateRangePicker.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport * as React from \"react\";\r\nimport { format } from \"date-fns\";\r\nimport {
|
|
1
|
+
{"version":3,"file":"desktopdaterangepicker.es.js","sources":["../src/components/date-picker/DesktopDateRangePicker.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport * as React from \"react\";\r\nimport { format } from \"date-fns\";\r\nimport { Calendar as CalendarIcon } from \"@trsys-tech/matrix-icons\";\r\nimport { PropsBase, PropsRange, DateRange, Matcher } from \"react-day-picker\";\r\n\r\nimport { cn } from \"../../lib/utils\";\r\nimport { Calendar } from \"./calendar\";\r\nimport { Button } from \"../button/Button\";\r\nimport { Popover, PopoverContent, PopoverTrigger } from \"../popover/Popover\";\r\n\r\ntype DesktopDateRangePickerProps = Omit<PropsBase, \"disabled\"> &\r\n Omit<PropsRange, \"mode\" | \"disabled\"> & {\r\n formatStr?: string;\r\n placeholder?: string;\r\n calendarClassName?: string;\r\n selected?: DateRange;\r\n required?: boolean;\r\n fromText?: string;\r\n toText?: string;\r\n disabled?: boolean;\r\n disabledDates?: Matcher | Matcher[];\r\n };\r\n\r\nconst DesktopDateRangePicker: React.FC<DesktopDateRangePickerProps> = ({\r\n formatStr,\r\n selected,\r\n placeholder,\r\n className,\r\n calendarClassName,\r\n fromText,\r\n toText,\r\n disabled,\r\n disabledDates,\r\n ...props\r\n}) => {\r\n const [isOpen, setIsOpen] = React.useState(false);\r\n\r\n return (\r\n <Popover\r\n open={isOpen}\r\n onOpenChange={open => {\r\n setIsOpen(open);\r\n }}\r\n >\r\n <PopoverTrigger asChild>\r\n <Button\r\n variant=\"text\"\r\n className={cn(\r\n \"mtx-flex mtx-h-8 mtx-w-full mtx-items-center mtx-justify-between mtx-whitespace-nowrap mtx-rounded-sm mtx-border mtx-border-input mtx-bg-transparent mtx-ps-3 mtx-pe-1 mtx-py-1.5 mtx-text-xs mtx-ring-offset-background data-[placeholder]:mtx-text-muted-foreground hover:mtx-border hover:mtx-border-primary hover:mtx-bg-transparent focus:mtx-border focus:mtx-border-primary focus:mtx-outline-none focus:mtx-ring focus:mtx-ring-primary-100 disabled:mtx-cursor-not-allowed disabled:mtx-bg-gray-100 disabled:mtx-text-text-300 disabled:mtx-border-gray-100 [&>span]:mtx-line-clamp-1 [&_svg]:disabled:mtx-text-text-300\",\r\n className,\r\n )}\r\n data-placeholder={!selected ? \"\" : undefined}\r\n aria-label={\r\n selected\r\n ? `Selected date: ${selected?.from ? format(selected.from, formatStr ?? \"yyyy/MM/dd\") : \"\"} - ${selected?.to ? format(selected.to, formatStr ?? \"yyyy/MM/dd\") : \"\"}`\r\n : placeholder\r\n }\r\n disabled={disabled}\r\n type=\"button\"\r\n >\r\n {selected ? (\r\n <div className=\"mtx-grid mtx-grid-cols-2 mtx-flex-1 mtx-justify-items-start\">\r\n <span>\r\n {fromText ?? \"From\"}: {selected?.from ? format(selected.from, formatStr ?? \"yyyy/MM/dd\") : \"-\"}\r\n </span>{\" \"}\r\n <span>\r\n {toText ?? \"To\"}: {selected?.to ? format(selected.to, formatStr ?? \"yyyy/MM/dd\") : \"-\"}\r\n </span>\r\n </div>\r\n ) : (\r\n <span>{placeholder ?? \"Pick a Range\"}</span>\r\n )}\r\n <CalendarIcon className=\"mtx-mr-2 mtx-h-5 mtx-w-4 mtx-ms-auto\" />\r\n </Button>\r\n </PopoverTrigger>\r\n <PopoverContent className=\"mtx-w-auto mtx-p-0\" align=\"start\">\r\n <Calendar\r\n defaultMonth={selected?.from}\r\n startMonth={new Date(2000, 0, 1)}\r\n endMonth={new Date(new Date().getFullYear() + 2, 11, 31)}\r\n {...props}\r\n mode=\"range\"\r\n selected={selected}\r\n className={cn(calendarClassName, \"md:mtx-max-w-full md:mtx-w-[36rem]\")}\r\n numberOfMonths={2}\r\n disabled={disabledDates}\r\n />\r\n </PopoverContent>\r\n </Popover>\r\n );\r\n};\r\n\r\nexport { DesktopDateRangePicker, type DesktopDateRangePickerProps };\r\n"],"names":["DesktopDateRangePicker","formatStr","selected","placeholder","className","calendarClassName","fromText","toText","disabled","disabledDates","props","isOpen","setIsOpen","React","jsxs","Popover","open","jsx","PopoverTrigger","Button","cn","format","CalendarIcon","PopoverContent","Calendar"],"mappings":";;;;;;;;AAyBA,MAAMA,IAAgE,CAAC;AAAA,EACrE,WAAAC;AAAA,EACA,UAAAC;AAAA,EACA,aAAAC;AAAA,EACA,WAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,UAAAC;AAAA,EACA,QAAAC;AAAA,EACA,UAAAC;AAAA,EACA,eAAAC;AAAA,EACA,GAAGC;AACL,MAAM;AACJ,QAAM,CAACC,GAAQC,CAAS,IAAIC,EAAM,SAAS,EAAK;AAEhD,SACE,gBAAAC;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,MAAMJ;AAAA,MACN,cAAc,CAAAK,MAAQ;AACpB,QAAAJ,EAAUI,CAAI;AAAA,MAChB;AAAA,MAEA,UAAA;AAAA,QAAA,gBAAAC,EAACC,GAAA,EAAe,SAAO,IACrB,UAAA,gBAAAJ;AAAA,UAACK;AAAA,UAAA;AAAA,YACC,SAAQ;AAAA,YACR,WAAWC;AAAA,cACT;AAAA,cACAhB;AAAA,YAAA;AAAA,YAEF,oBAAmBF,IAAgB,SAAL;AAAA,YAC9B,cACEA,IACI,kBAAkBA,GAAU,OAAOmB,EAAOnB,EAAS,MAAMD,KAAa,YAAY,IAAI,EAAE,MAAMC,GAAU,KAAKmB,EAAOnB,EAAS,IAAID,KAAa,YAAY,IAAI,EAAE,KAChKE;AAAA,YAEN,UAAAK;AAAA,YACA,MAAK;AAAA,YAEJ,UAAA;AAAA,cAAAN,IACC,gBAAAY,EAAC,OAAA,EAAI,WAAU,+DACb,UAAA;AAAA,gBAAA,gBAAAA,EAAC,QAAA,EACE,UAAA;AAAA,kBAAAR,KAAY;AAAA,kBAAO;AAAA,kBAAGJ,GAAU,OAAOmB,EAAOnB,EAAS,MAAMD,KAAa,YAAY,IAAI;AAAA,gBAAA,GAC7F;AAAA,gBAAQ;AAAA,kCACP,QAAA,EACE,UAAA;AAAA,kBAAAM,KAAU;AAAA,kBAAK;AAAA,kBAAGL,GAAU,KAAKmB,EAAOnB,EAAS,IAAID,KAAa,YAAY,IAAI;AAAA,gBAAA,EAAA,CACrF;AAAA,cAAA,EAAA,CACF,IAEA,gBAAAgB,EAAC,QAAA,EAAM,UAAAd,KAAe,gBAAe;AAAA,cAEvC,gBAAAc,EAACK,GAAA,EAAa,WAAU,uCAAA,CAAuC;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA,GAEnE;AAAA,QACA,gBAAAL,EAACM,GAAA,EAAe,WAAU,sBAAqB,OAAM,SACnD,UAAA,gBAAAN;AAAA,UAACO;AAAAA,UAAA;AAAA,YACC,cAActB,GAAU;AAAA,YACxB,YAAY,IAAI,KAAK,KAAM,GAAG,CAAC;AAAA,YAC/B,UAAU,IAAI,MAAK,oBAAI,KAAA,GAAO,gBAAgB,GAAG,IAAI,EAAE;AAAA,YACtD,GAAGQ;AAAA,YACJ,MAAK;AAAA,YACL,UAAAR;AAAA,YACA,WAAWkB,EAAGf,GAAmB,oCAAoC;AAAA,YACrE,gBAAgB;AAAA,YAChB,UAAUI;AAAA,UAAA;AAAA,QAAA,EACZ,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;"}
|
|
@@ -1,38 +1,45 @@
|
|
|
1
|
-
import { jsxs as
|
|
2
|
-
import { useState as
|
|
3
|
-
import { cn as
|
|
4
|
-
import { Button as
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
const
|
|
1
|
+
import { jsxs as i, jsx as m } from "react/jsx-runtime";
|
|
2
|
+
import { useState as u } from "react";
|
|
3
|
+
import { cn as s } from "./utils.es.js";
|
|
4
|
+
import { Button as l } from "./button.es.js";
|
|
5
|
+
import { Popover as f, PopoverTrigger as h, PopoverContent as b } from "./popover.es.js";
|
|
6
|
+
import { TimePickerContent as g } from "./timepickercontent.es.js";
|
|
7
|
+
const d = (t, a) => {
|
|
8
|
+
const o = t.minute.toString().padStart(2, "0");
|
|
9
|
+
if (a)
|
|
10
|
+
return `${(t.ampm ? t.hour % 12 + (t.ampm === "PM" ? 12 : 0) : t.hour).toString().padStart(2, "0")} : ${o}`;
|
|
11
|
+
const r = t.ampm ? t.hour % 12 + (t.ampm === "PM" ? 12 : 0) : t.hour, e = r % 12 || 12, n = t.ampm ?? (r >= 12 ? "PM" : "AM");
|
|
12
|
+
return `${e.toString().padStart(2, "0")} : ${o} ${n}`;
|
|
13
|
+
}, k = ({
|
|
8
14
|
time: t,
|
|
9
15
|
onTimeChange: a,
|
|
10
|
-
className:
|
|
16
|
+
className: o,
|
|
11
17
|
slotsProps: r,
|
|
12
|
-
|
|
13
|
-
|
|
18
|
+
is24HourMode: e = !1,
|
|
19
|
+
placeholder: n = "Pick a Time",
|
|
20
|
+
...x
|
|
14
21
|
}) => {
|
|
15
|
-
const [
|
|
16
|
-
return /* @__PURE__ */
|
|
17
|
-
/* @__PURE__ */
|
|
18
|
-
|
|
22
|
+
const [p, c] = u(!1);
|
|
23
|
+
return /* @__PURE__ */ i(f, { open: p, onOpenChange: c, children: [
|
|
24
|
+
/* @__PURE__ */ m(h, { asChild: !0, children: /* @__PURE__ */ m(
|
|
25
|
+
l,
|
|
19
26
|
{
|
|
20
27
|
variant: "text",
|
|
21
|
-
className:
|
|
28
|
+
className: s(
|
|
22
29
|
"mtx-flex mtx-h-8 mtx-w-full mtx-items-center mtx-justify-between mtx-whitespace-nowrap mtx-rounded-sm mtx-border mtx-border-input mtx-bg-transparent mtx-ps-3 mtx-pe-1 mtx-py-1.5 mtx-text-xs mtx-ring-offset-background data-[placeholder]:mtx-text-muted-foreground hover:mtx-border hover:mtx-border-primary hover:mtx-bg-transparent focus:mtx-border focus:mtx-border-primary focus:mtx-outline-none focus:mtx-ring focus:mtx-ring-primary-100 disabled:mtx-cursor-not-allowed disabled:mtx-bg-gray-100 disabled:mtx-text-text-300 disabled:mtx-border-gray-100 [&>span]:mtx-line-clamp-1 [&_svg]:disabled:mtx-text-text-300",
|
|
23
|
-
|
|
30
|
+
o
|
|
24
31
|
),
|
|
25
32
|
"data-placeholder": t ? void 0 : "",
|
|
26
|
-
"aria-label": t
|
|
27
|
-
...
|
|
33
|
+
"aria-label": t ? `Selected time: ${d(t, e)}` : n,
|
|
34
|
+
...x,
|
|
28
35
|
type: "button",
|
|
29
|
-
children:
|
|
36
|
+
children: t ? d(t, e) : "-- : --"
|
|
30
37
|
}
|
|
31
38
|
) }),
|
|
32
|
-
/* @__PURE__ */
|
|
39
|
+
/* @__PURE__ */ m(b, { ...r?.content ?? {}, className: s("mtx-w-auto mtx-p-0", r?.content?.className), children: /* @__PURE__ */ m(g, { isOpen: p, is24HourMode: e, onTimeChange: a, time: t, slotsProps: r }) })
|
|
33
40
|
] });
|
|
34
41
|
};
|
|
35
42
|
export {
|
|
36
|
-
|
|
43
|
+
k as DesktopTimePicker
|
|
37
44
|
};
|
|
38
45
|
//# sourceMappingURL=desktoptimepicker.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"desktoptimepicker.es.js","sources":["../src/components/date-picker/DesktopTimePicker.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport { HTMLAttributes, useState } from \"react\";\r\n\r\nimport { cn } from \"../../lib/utils\";\r\nimport { Button } from \"../button/Button\";\r\nimport { Time, TimePickerContent } from \"./TimePickerContent\";\r\
|
|
1
|
+
{"version":3,"file":"desktoptimepicker.es.js","sources":["../src/components/date-picker/DesktopTimePicker.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport { HTMLAttributes, useState } from \"react\";\r\n\r\nimport { cn } from \"../../lib/utils\";\r\nimport { Button } from \"../button/Button\";\r\nimport { Popover, PopoverContent, PopoverTrigger } from \"../popover/Popover\";\r\nimport { Time, TimePickerContent } from \"./TimePickerContent\";\r\n\r\nconst formatTimeLabel = (time: Time, is24HourMode: boolean) => {\r\n const minute = time.minute.toString().padStart(2, \"0\");\r\n\r\n if (is24HourMode) {\r\n const hour = time.ampm ? (time.hour % 12) + (time.ampm === \"PM\" ? 12 : 0) : time.hour;\r\n return `${hour.toString().padStart(2, \"0\")} : ${minute}`;\r\n }\r\n\r\n const hourFromAmpm = time.ampm ? (time.hour % 12) + (time.ampm === \"PM\" ? 12 : 0) : time.hour;\r\n const hour = hourFromAmpm % 12 || 12;\r\n const ampm = time.ampm ?? (hourFromAmpm >= 12 ? \"PM\" : \"AM\");\r\n\r\n return `${hour.toString().padStart(2, \"0\")} : ${minute} ${ampm}`;\r\n};\r\n\r\ntype DesktopTimePickerProps = HTMLAttributes<HTMLButtonElement> & {\r\n time: Time | undefined;\r\n onTimeChange: (time: Time | undefined) => void;\r\n is24HourMode?: boolean;\r\n placeholder?: string;\r\n disabled?: boolean;\r\n slotsProps?: {\r\n content?: HTMLAttributes<HTMLDivElement>;\r\n };\r\n};\r\n\r\nconst DesktopTimePicker: React.FC<DesktopTimePickerProps> = ({\r\n time,\r\n onTimeChange,\r\n className,\r\n slotsProps,\r\n is24HourMode = false,\r\n placeholder = \"Pick a Time\",\r\n ...restProps\r\n}) => {\r\n const [isOpen, setIsOpen] = useState(false);\r\n\r\n return (\r\n <Popover open={isOpen} onOpenChange={setIsOpen}>\r\n <PopoverTrigger asChild>\r\n <Button\r\n variant=\"text\"\r\n className={cn(\r\n \"mtx-flex mtx-h-8 mtx-w-full mtx-items-center mtx-justify-between mtx-whitespace-nowrap mtx-rounded-sm mtx-border mtx-border-input mtx-bg-transparent mtx-ps-3 mtx-pe-1 mtx-py-1.5 mtx-text-xs mtx-ring-offset-background data-[placeholder]:mtx-text-muted-foreground hover:mtx-border hover:mtx-border-primary hover:mtx-bg-transparent focus:mtx-border focus:mtx-border-primary focus:mtx-outline-none focus:mtx-ring focus:mtx-ring-primary-100 disabled:mtx-cursor-not-allowed disabled:mtx-bg-gray-100 disabled:mtx-text-text-300 disabled:mtx-border-gray-100 [&>span]:mtx-line-clamp-1 [&_svg]:disabled:mtx-text-text-300\",\r\n className,\r\n )}\r\n data-placeholder={!time ? \"\" : undefined}\r\n aria-label={time ? `Selected time: ${formatTimeLabel(time, is24HourMode)}` : placeholder}\r\n {...restProps}\r\n type=\"button\"\r\n >\r\n {time ? formatTimeLabel(time, is24HourMode) : \"-- : --\"}\r\n </Button>\r\n </PopoverTrigger>\r\n <PopoverContent {...(slotsProps?.content ?? {})} className={cn(\"mtx-w-auto mtx-p-0\", slotsProps?.content?.className)}>\r\n <TimePickerContent isOpen={isOpen} is24HourMode={is24HourMode} onTimeChange={onTimeChange} time={time} slotsProps={slotsProps} />\r\n </PopoverContent>\r\n </Popover>\r\n );\r\n};\r\nexport { DesktopTimePicker, type DesktopTimePickerProps };\r\n"],"names":["formatTimeLabel","time","is24HourMode","minute","hourFromAmpm","hour","ampm","DesktopTimePicker","onTimeChange","className","slotsProps","placeholder","restProps","isOpen","setIsOpen","useState","jsxs","Popover","jsx","PopoverTrigger","Button","cn","PopoverContent","TimePickerContent"],"mappings":";;;;;;AASA,MAAMA,IAAkB,CAACC,GAAYC,MAA0B;AAC7D,QAAMC,IAASF,EAAK,OAAO,WAAW,SAAS,GAAG,GAAG;AAErD,MAAIC;AAEF,WAAO,IADMD,EAAK,OAAQA,EAAK,OAAO,MAAOA,EAAK,SAAS,OAAO,KAAK,KAAKA,EAAK,MAClE,WAAW,SAAS,GAAG,GAAG,CAAC,MAAME,CAAM;AAGxD,QAAMC,IAAeH,EAAK,OAAQA,EAAK,OAAO,MAAOA,EAAK,SAAS,OAAO,KAAK,KAAKA,EAAK,MACnFI,IAAOD,IAAe,MAAM,IAC5BE,IAAOL,EAAK,SAASG,KAAgB,KAAK,OAAO;AAEvD,SAAO,GAAGC,EAAK,SAAA,EAAW,SAAS,GAAG,GAAG,CAAC,MAAMF,CAAM,IAAIG,CAAI;AAChE,GAaMC,IAAsD,CAAC;AAAA,EAC3D,MAAAN;AAAA,EACA,cAAAO;AAAA,EACA,WAAAC;AAAA,EACA,YAAAC;AAAA,EACA,cAAAR,IAAe;AAAA,EACf,aAAAS,IAAc;AAAA,EACd,GAAGC;AACL,MAAM;AACJ,QAAM,CAACC,GAAQC,CAAS,IAAIC,EAAS,EAAK;AAE1C,SACE,gBAAAC,EAACC,GAAA,EAAQ,MAAMJ,GAAQ,cAAcC,GACnC,UAAA;AAAA,IAAA,gBAAAI,EAACC,GAAA,EAAe,SAAO,IACrB,UAAA,gBAAAD;AAAA,MAACE;AAAA,MAAA;AAAA,QACC,SAAQ;AAAA,QACR,WAAWC;AAAA,UACT;AAAA,UACAZ;AAAA,QAAA;AAAA,QAEF,oBAAmBR,IAAY,SAAL;AAAA,QAC1B,cAAYA,IAAO,kBAAkBD,EAAgBC,GAAMC,CAAY,CAAC,KAAKS;AAAA,QAC5E,GAAGC;AAAA,QACJ,MAAK;AAAA,QAEJ,UAAAX,IAAOD,EAAgBC,GAAMC,CAAY,IAAI;AAAA,MAAA;AAAA,IAAA,GAElD;AAAA,IACA,gBAAAgB,EAACI,KAAgB,GAAIZ,GAAY,WAAW,CAAA,GAAK,WAAWW,EAAG,sBAAsBX,GAAY,SAAS,SAAS,GACjH,UAAA,gBAAAQ,EAACK,GAAA,EAAkB,QAAAV,GAAgB,cAAAX,GAA4B,cAAAM,GAA4B,MAAAP,GAAY,YAAAS,EAAA,CAAwB,EAAA,CACjI;AAAA,EAAA,GACF;AAEJ;"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { jsxs as a, Fragment as
|
|
1
|
+
import { jsxs as a, Fragment as N, jsx as e } from "react/jsx-runtime";
|
|
2
2
|
import * as i from "react";
|
|
3
|
-
import { VisuallyHidden as
|
|
4
|
-
import { Calendar as
|
|
3
|
+
import { VisuallyHidden as C } from "@radix-ui/react-visually-hidden";
|
|
4
|
+
import { Calendar as k } from "@trsys-tech/matrix-icons";
|
|
5
5
|
import { cn as c } from "./utils.es.js";
|
|
6
|
-
import { Calendar as
|
|
6
|
+
import { Calendar as j } from "./calendar.es.js";
|
|
7
7
|
import { Button as n } from "./button.es.js";
|
|
8
|
-
import { Dialog as
|
|
8
|
+
import { Dialog as P, DialogContent as S, DialogHeader as F, DialogTitle as O, DialogDescription as A } from "./dialog.es.js";
|
|
9
9
|
import { format as o } from "./format.es.js";
|
|
10
|
-
const
|
|
10
|
+
const _ = ({
|
|
11
11
|
formatStr: r,
|
|
12
12
|
selected: x,
|
|
13
13
|
placeholder: p,
|
|
@@ -17,14 +17,15 @@ const V = ({
|
|
|
17
17
|
applyText: b,
|
|
18
18
|
onSelect: g,
|
|
19
19
|
disabled: y,
|
|
20
|
-
|
|
20
|
+
disabledDates: D,
|
|
21
|
+
...v
|
|
21
22
|
}) => {
|
|
22
|
-
const [
|
|
23
|
+
const [w, l] = i.useState(!1), t = x ? new Date(x) : void 0, [m, d] = i.useState(t), s = () => {
|
|
23
24
|
l(!1), d(t);
|
|
24
|
-
},
|
|
25
|
+
}, M = () => {
|
|
25
26
|
g?.(m), l(!1);
|
|
26
27
|
};
|
|
27
|
-
return /* @__PURE__ */ a(
|
|
28
|
+
return /* @__PURE__ */ a(N, { children: [
|
|
28
29
|
/* @__PURE__ */ a(
|
|
29
30
|
n,
|
|
30
31
|
{
|
|
@@ -40,41 +41,42 @@ const V = ({
|
|
|
40
41
|
type: "button",
|
|
41
42
|
children: [
|
|
42
43
|
t ? o(t, r ?? "eee, MMM dd") : /* @__PURE__ */ e("span", { children: p ?? "Pick a date" }),
|
|
43
|
-
/* @__PURE__ */ e(
|
|
44
|
+
/* @__PURE__ */ e(k, { className: "mtx-mr-2 mtx-h-5 mtx-w-5 mtx-ms-auto" })
|
|
44
45
|
]
|
|
45
46
|
}
|
|
46
47
|
),
|
|
47
|
-
/* @__PURE__ */ e(
|
|
48
|
-
/* @__PURE__ */ a(
|
|
49
|
-
/* @__PURE__ */ e(
|
|
48
|
+
/* @__PURE__ */ e(P, { open: w, onOpenChange: s, children: /* @__PURE__ */ a(S, { className: "mtx-h-dscreen mtx-w-screen mtx-p-0 mtx-flex mtx-flex-col mtx-gap-0 data-[state=open]:mtx-animate-slide-from-bottom data-[state=closed]:mtx-animate-slide-to-bottom mtx-overflow-auto mtx-max-w-screen-2xl sm:mtx-rounded-none", children: [
|
|
49
|
+
/* @__PURE__ */ a(F, { className: "mtx-p-4 mtx-border-b mtx-border-b-gray-200", children: [
|
|
50
|
+
/* @__PURE__ */ e(O, { asChild: !0, children: /* @__PURE__ */ a("div", { className: "mtx-text-sm mtx-font-bold mtx-space-y-1 mtx-mt-3", children: [
|
|
50
51
|
/* @__PURE__ */ e("h5", { className: "mtx-text-text-300", children: m ? m.getFullYear() : /* @__PURE__ */ e("pre", { children: " " }) }),
|
|
51
52
|
/* @__PURE__ */ e("h6", { className: "", children: m ? o(m, r ?? "eee, MMM dd") : /* @__PURE__ */ e("pre", { children: " " }) })
|
|
52
53
|
] }) }),
|
|
53
|
-
/* @__PURE__ */ e(
|
|
54
|
+
/* @__PURE__ */ e(C, { children: /* @__PURE__ */ e(A, { children: "Date Picker" }) })
|
|
54
55
|
] }),
|
|
55
56
|
/* @__PURE__ */ a("div", { className: "mtx-flex-1 mtx-flex mtx-flex-col mtx-items-center mtx-p-4", children: [
|
|
56
57
|
/* @__PURE__ */ e(
|
|
57
|
-
|
|
58
|
+
j,
|
|
58
59
|
{
|
|
59
60
|
defaultMonth: t,
|
|
60
61
|
startMonth: new Date(2e3, 0, 1),
|
|
61
62
|
endMonth: new Date((/* @__PURE__ */ new Date()).getFullYear() + 2, 11, 31),
|
|
62
|
-
...
|
|
63
|
+
...v,
|
|
63
64
|
mode: "single",
|
|
64
65
|
selected: m,
|
|
65
66
|
onSelect: d,
|
|
66
|
-
className: c("mtx-p-0", f)
|
|
67
|
+
className: c("mtx-p-0", f),
|
|
68
|
+
disabled: D
|
|
67
69
|
}
|
|
68
70
|
),
|
|
69
71
|
/* @__PURE__ */ a("div", { className: "mtx-flex mtx-justify-center mtx-items-center mtx-gap-4 mtx-mt-auto mtx-w-full", children: [
|
|
70
72
|
/* @__PURE__ */ e(n, { variant: "text", className: "mtx-flex-1 mtx-h-10", onClick: s, type: "button", children: u ?? "Cancel" }),
|
|
71
|
-
/* @__PURE__ */ e(n, { variant: "primary", className: "mtx-flex-1 mtx-h-10", onClick:
|
|
73
|
+
/* @__PURE__ */ e(n, { variant: "primary", className: "mtx-flex-1 mtx-h-10", onClick: M, type: "button", children: b ?? "Apply" })
|
|
72
74
|
] })
|
|
73
75
|
] })
|
|
74
76
|
] }) })
|
|
75
77
|
] });
|
|
76
78
|
};
|
|
77
79
|
export {
|
|
78
|
-
|
|
80
|
+
_ as MobileDatePicker
|
|
79
81
|
};
|
|
80
82
|
//# sourceMappingURL=mobiledatepicker.es.js.map
|