@agile-team/mach-table-react 0.5.0 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +110 -21
- package/README.md +74 -3
- package/dist/chunk-VVQCWQ2C.js +2 -0
- package/dist/chunk-VVQCWQ2C.js.map +1 -0
- package/dist/chunk-Z5XSUQ5O.cjs +2 -0
- package/dist/chunk-Z5XSUQ5O.cjs.map +1 -0
- package/dist/index.cjs +1 -205
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +62 -8
- package/dist/index.d.ts +62 -8
- package/dist/index.js +1 -176
- package/dist/index.js.map +1 -1
- package/dist/mach-table.css +517 -3
- package/dist/workflows-BhNumPcR.d.cts +129 -0
- package/dist/workflows-BhNumPcR.d.ts +129 -0
- package/dist/workflows.cjs +2 -0
- package/dist/workflows.cjs.map +1 -0
- package/dist/workflows.d.cts +3 -0
- package/dist/workflows.d.ts +3 -0
- package/dist/workflows.js +2 -0
- package/dist/workflows.js.map +1 -0
- package/package.json +14 -4
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/RobotGrid.tsx","../src/useMachGrid.ts","../src/adapters.ts","../src/index.ts"],"sourcesContent":["import {\n createElement,\n useEffect,\n useRef,\n type CSSProperties,\n type MutableRefObject\n} from \"react\";\nimport { createGrid, DIRECT_GRID_OPTION_KEYS, EVENT_TYPES } from \"@agile-team/mach-table\";\nimport type { GridApi, GridOptions } from \"@agile-team/mach-table\";\n\nexport type RobotGridReactProps<TData = any> = Omit<GridOptions<TData>, \"className\"> & {\n /** CSS class applied to the React host element. */\n className?: string;\n /** CSS class forwarded to MachTable's inner grid root. */\n gridClassName?: string;\n style?: CSSProperties;\n apiRef?: MutableRefObject<GridApi<TData> | null>;\n};\n\nconst UPDATABLE_KEYS = DIRECT_GRID_OPTION_KEYS.filter((key) => key !== \"className\");\n\nexport function RobotGrid<TData = any>(props: RobotGridReactProps<TData>) {\n const { className, style, apiRef } = props;\n const hostRef = useRef<HTMLDivElement | null>(null);\n const gridApiRef = useRef<GridApi<TData> | null>(null);\n const propsRef = useRef(props);\n propsRef.current = props;\n\n useEffect(() => {\n const host = hostRef.current;\n if (!host) return;\n\n const initial = propsRef.current;\n const options: Record<string, unknown> = {};\n for (const key of Object.keys(initial) as string[]) {\n if (key === \"className\" || key === \"gridClassName\" || key === \"style\" || key === \"apiRef\") continue;\n if (key.startsWith(\"on\")) continue;\n options[key] = (initial as Record<string, unknown>)[key];\n }\n if (initial.gridClassName !== undefined) options.className = initial.gridClassName;\n for (const eventType of EVENT_TYPES) {\n const handlerKey = `on${eventType.charAt(0).toUpperCase()}${eventType.slice(1)}`;\n options[handlerKey] = (event: unknown) => {\n const latest = propsRef.current as Record<string, unknown>;\n const handler = latest[handlerKey];\n if (typeof handler === \"function\") (handler as (event: unknown) => void)(event);\n };\n }\n\n const api = createGrid<TData>(host, options as GridOptions<TData>);\n gridApiRef.current = api;\n return () => {\n api.destroy();\n gridApiRef.current = null;\n };\n }, []);\n\n useEffect(() => {\n if (!apiRef) return;\n const assigned = gridApiRef.current;\n apiRef.current = assigned;\n return () => {\n if (apiRef.current === assigned) apiRef.current = null;\n };\n }, [apiRef]);\n\n const rowDataReady = useRef(false);\n useEffect(() => {\n if (!rowDataReady.current) {\n rowDataReady.current = true;\n return;\n }\n gridApiRef.current?.setRowData(props.rowData);\n }, [props.rowData]);\n\n const columnDefsReady = useRef(false);\n useEffect(() => {\n if (!columnDefsReady.current) {\n columnDefsReady.current = true;\n return;\n }\n gridApiRef.current?.setColumnDefs(props.columnDefs);\n }, [props.columnDefs]);\n\n const quickFilterReady = useRef(false);\n useEffect(() => {\n if (!quickFilterReady.current) {\n quickFilterReady.current = true;\n return;\n }\n gridApiRef.current?.setQuickFilter(props.quickFilterText);\n }, [props.quickFilterText]);\n\n const gridClassNameReady = useRef(false);\n useEffect(() => {\n if (!gridClassNameReady.current) {\n gridClassNameReady.current = true;\n return;\n }\n gridApiRef.current?.updateOptions({ className: props.gridClassName });\n }, [props.gridClassName]);\n\n const optionValues = UPDATABLE_KEYS.map((key) => props[key]);\n const previousOptionValues = useRef<readonly unknown[] | null>(null);\n useEffect(() => {\n const previous = previousOptionValues.current;\n previousOptionValues.current = optionValues;\n if (!previous) {\n return;\n }\n const changed: Record<string, unknown> = {};\n optionValues.forEach((value, index) => {\n if (!Object.is(value, previous[index])) changed[UPDATABLE_KEYS[index]] = value;\n });\n if (Object.keys(changed).length > 0) {\n gridApiRef.current?.updateOptions(changed as Partial<GridOptions<TData>>);\n }\n }, optionValues);\n\n return createElement(\"div\", {\n ref: hostRef,\n className: `mach-react-host ${className ?? \"\"}`.trim() || undefined,\n style\n });\n}\n","import { useMemo, useState, type MutableRefObject } from \"react\";\nimport type { GridApi } from \"@agile-team/mach-table\";\n\nexport interface UseMachGridReturn<TData = any> {\n apiRef: MutableRefObject<GridApi<TData> | null>;\n api: GridApi<TData> | null;\n}\n\nexport function useMachGrid<TData = any>(): UseMachGridReturn<TData> {\n const [api, setApi] = useState<GridApi<TData> | null>(null);\n const apiRef = useMemo(() => {\n let current: GridApi<TData> | null = null;\n return Object.defineProperty({}, \"current\", {\n enumerable: true,\n get: () => current,\n set: (next: GridApi<TData> | null) => {\n if (next === current) return;\n current = next;\n setApi(next);\n }\n }) as MutableRefObject<GridApi<TData> | null>;\n }, []);\n\n return { apiRef, api };\n}\n","import { createElement, isValidElement, type ComponentType, type ReactNode } from \"react\";\nimport { createRoot } from \"react-dom/client\";\nimport type { CellRendererParams, CellRendererFn, DetailRowRendererParams, GridApi, RowNode } from \"@agile-team/mach-table\";\n\nexport interface ReactCellRendererProps<TData = any, TValue = any> extends CellRendererParams<TData, TValue> {\n children?: ReactNode;\n}\n\nexport interface ReactDetailProps<TData = any> {\n data: TData | null;\n node: RowNode<TData>;\n api: GridApi<TData>;\n}\n\nexport function reactCellRenderer<TData = any, TValue = any>(\n Component: ComponentType<ReactCellRendererProps<TData, TValue>>\n): CellRendererFn {\n return (params) => {\n const host = document.createElement(\"div\");\n host.className = \"mach-cell-react\";\n host.style.width = \"100%\";\n const root = createRoot(host);\n root.render(createElement(Component, params as ReactCellRendererProps<TData, TValue>));\n let destroyed = false;\n return {\n el: host,\n destroy: () => {\n if (destroyed) return;\n destroyed = true;\n window.setTimeout(() => {\n root.unmount();\n }, 0);\n }\n };\n };\n}\n\nexport function reactDetailRenderer<TData = any>(\n Component: ComponentType<ReactDetailProps<TData>>\n): (params: DetailRowRendererParams<TData>) => { el: HTMLElement; destroy?: () => void } {\n return (params) => {\n const host = document.createElement(\"div\");\n host.style.height = \"100%\";\n const root = createRoot(host);\n root.render(createElement(Component, params));\n let destroyed = false;\n return {\n el: host,\n destroy: () => {\n if (destroyed) return;\n destroyed = true;\n window.setTimeout(() => {\n root.unmount();\n }, 0);\n }\n };\n };\n}\n\nexport function isReactElement(value: unknown): boolean {\n return isValidElement(value);\n}\n","import { RobotGrid } from \"./RobotGrid\";\n\nexport { RobotGrid };\nexport { RobotGrid as MachTable };\nexport type { RobotGridReactProps } from \"./RobotGrid\";\nexport { useMachGrid } from \"./useMachGrid\";\nexport type { UseMachGridReturn } from \"./useMachGrid\";\nexport { reactCellRenderer, reactDetailRenderer } from \"./adapters\";\nexport type { ReactCellRendererProps, ReactDetailProps } from \"./adapters\";\nexport * from \"@agile-team/mach-table\";\n\n/** Enables `React.lazy(() => import(\"@agile-team/mach-table-react\"))`. */\nexport default RobotGrid;\n"],"mappings":"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","names":["createElement"]}
|
|
1
|
+
{"version":3,"sources":["../src/MachTable.tsx","../src/defaults.tsx","../src/MachTableToolbar.tsx","../src/adapters.ts","../src/index.ts"],"sourcesContent":["import {\n createElement,\n useEffect,\n useRef,\n type CSSProperties,\n type MutableRefObject\n} from \"react\";\nimport { createGrid, GRID_OPTION_KEYS, EVENT_TYPES, resolveMachTableGridOptions } from \"@agile-team/mach-table\";\nimport type { GridApi, GridOptions, MachTablePresetSelection } from \"@agile-team/mach-table\";\nimport { useMachTableConfig } from \"./defaults\";\n\ntype AdapterOnlyGridOption = \"className\" | \"ariaLabel\" | \"ariaLabelledBy\" | \"ariaDescribedBy\";\n\nexport type MachTableReactProps<TData = any> = Omit<GridOptions<TData>, AdapterOnlyGridOption> & {\n /** Named application preset(s). Explicit component props still win. */\n preset?: MachTablePresetSelection;\n /** CSS class applied to the React host element. */\n className?: string;\n /** CSS class forwarded to MachTable's inner grid root. */\n gridClassName?: string;\n gridAriaLabel?: string;\n gridAriaLabelledBy?: string;\n gridAriaDescribedBy?: string;\n \"aria-label\"?: string;\n \"aria-labelledby\"?: string;\n \"aria-describedby\"?: string;\n style?: CSSProperties;\n apiRef?: MutableRefObject<GridApi<TData> | null>;\n};\n\nfunction collectGridOptions<TData>(\n props: MachTableReactProps<TData>,\n config: ReturnType<typeof useMachTableConfig>\n): GridOptions<TData> {\n const explicit: Record<string, unknown> = {};\n for (const key of GRID_OPTION_KEYS) {\n if (key === \"className\") continue;\n const value = key === \"ariaLabel\"\n ? props.gridAriaLabel\n : key === \"ariaLabelledBy\"\n ? props.gridAriaLabelledBy\n : key === \"ariaDescribedBy\"\n ? props.gridAriaDescribedBy\n : props[key];\n if (value !== undefined) explicit[key] = value;\n }\n if (props.gridClassName !== undefined) explicit.className = props.gridClassName;\n return resolveMachTableGridOptions(config, props.preset, explicit as Partial<GridOptions<TData>>).options;\n}\n\nexport function MachTable<TData = any>(props: MachTableReactProps<TData>) {\n const { className, style, apiRef } = props;\n const hostRef = useRef<HTMLDivElement | null>(null);\n const gridApiRef = useRef<GridApi<TData> | null>(null);\n const propsRef = useRef(props);\n propsRef.current = props;\n const config = useMachTableConfig();\n const effectiveInputs = [\n config,\n props.preset,\n ...GRID_OPTION_KEYS.map((key) => key === \"className\"\n ? props.gridClassName\n : key === \"ariaLabel\"\n ? props.gridAriaLabel\n : key === \"ariaLabelledBy\"\n ? props.gridAriaLabelledBy\n : key === \"ariaDescribedBy\"\n ? props.gridAriaDescribedBy\n : props[key])\n ];\n const effectiveCache = useRef<{ inputs: readonly unknown[]; options: GridOptions<TData> } | null>(null);\n if (\n !effectiveCache.current ||\n effectiveCache.current.inputs.length !== effectiveInputs.length ||\n effectiveInputs.some((value, index) => !Object.is(value, effectiveCache.current?.inputs[index]))\n ) {\n effectiveCache.current = { inputs: effectiveInputs, options: collectGridOptions(props, config) };\n }\n const effectiveOptions = effectiveCache.current.options;\n const effectiveRef = useRef(effectiveOptions);\n effectiveRef.current = effectiveOptions;\n\n useEffect(() => {\n const host = hostRef.current;\n if (!host) return;\n\n const options = { ...effectiveRef.current } as Record<string, unknown>;\n for (const eventType of EVENT_TYPES) {\n const handlerKey = `on${eventType.charAt(0).toUpperCase()}${eventType.slice(1)}`;\n options[handlerKey] = (event: unknown) => {\n const defaultHandler = (effectiveRef.current as Record<string, unknown>)[handlerKey];\n if (typeof defaultHandler === \"function\") (defaultHandler as (value: unknown) => void)(event);\n const latest = propsRef.current as Record<string, unknown>;\n const handler = latest[handlerKey];\n if (typeof handler === \"function\" && handler !== defaultHandler) {\n (handler as (value: unknown) => void)(event);\n }\n };\n }\n\n const api = createGrid<TData>(host, options);\n gridApiRef.current = api;\n return () => {\n api.destroy();\n gridApiRef.current = null;\n };\n }, []);\n\n useEffect(() => {\n if (!apiRef) return;\n const assigned = gridApiRef.current;\n apiRef.current = assigned;\n return () => {\n if (apiRef.current === assigned) apiRef.current = null;\n };\n }, [apiRef]);\n\n const optionValues = GRID_OPTION_KEYS.map((key) => effectiveOptions[key]);\n const previousOptionValues = useRef<readonly unknown[] | null>(null);\n useEffect(() => {\n const previous = previousOptionValues.current;\n previousOptionValues.current = optionValues;\n if (!previous) {\n return;\n }\n const changed: Record<string, unknown> = {};\n optionValues.forEach((value, index) => {\n if (Object.is(value, previous[index])) return;\n changed[GRID_OPTION_KEYS[index]] = value;\n });\n if (Object.keys(changed).length > 0) {\n gridApiRef.current?.updateOptions(changed);\n }\n }, optionValues);\n\n return createElement(\"div\", {\n ref: hostRef,\n className: `mach-react-host ${className ?? \"\"}`.trim() || undefined,\n style,\n \"aria-label\": props[\"aria-label\"],\n \"aria-labelledby\": props[\"aria-labelledby\"],\n \"aria-describedby\": props[\"aria-describedby\"]\n });\n}\n\n/** @deprecated Use MachTable. Kept as a source-compatible alias through 0.x. */\nexport const RobotGrid = MachTable;\n/** @deprecated Use MachTableReactProps. */\nexport type RobotGridReactProps<TData = any> = MachTableReactProps<TData>;\n","import { createContext, createElement, useContext, useMemo, type ReactNode } from \"react\";\nimport {\n mergeMachTableConfig,\n normalizeMachTableConfig,\n type GridOptions,\n type MachTableRuntimeConfig,\n type ResolvedMachTableConfig\n} from \"@agile-team/mach-table\";\n\nconst ROOT_CONFIG = normalizeMachTableConfig();\nconst MachTableConfigContext = createContext<ResolvedMachTableConfig>(ROOT_CONFIG);\n\nexport interface MachTableProviderProps<TData = any> {\n /** Full app/route configuration. Prefer importing this from mach-table.config.ts. */\n config?: MachTableRuntimeConfig;\n /** Backwards-compatible shorthand for config.defaults. */\n defaults?: Partial<GridOptions<TData>>;\n children?: ReactNode;\n}\n\n/** Supplies app-, route- or layout-scoped defaults without making tables eager. */\nexport function MachTableProvider<TData = any>({ config, defaults, children }: MachTableProviderProps<TData>) {\n const parent = useContext(MachTableConfigContext);\n const value = useMemo(\n () => mergeMachTableConfig(parent, { ...(config ?? {}), ...(defaults ? { defaults } : {}) }),\n [parent, config, defaults]\n );\n return createElement(MachTableConfigContext.Provider, { value }, children);\n}\n\nexport function useMachTableDefaults<TData = any>(): Partial<GridOptions<TData>> {\n return useContext(MachTableConfigContext).defaults as Partial<GridOptions<TData>>;\n}\n\nexport function useMachTableConfig(): ResolvedMachTableConfig {\n return useContext(MachTableConfigContext);\n}\n","import { createElement, type ChangeEvent, type MouseEvent as ReactMouseEvent, type ReactNode } from \"react\";\nimport type { GridApi, GridSize, MachTableCommands } from \"@agile-team/mach-table\";\n\nexport interface MachTableToolbarFeatures {\n search?: boolean;\n refresh?: boolean;\n columns?: boolean;\n density?: boolean;\n export?: boolean;\n undoRedo?: boolean;\n fullscreen?: boolean;\n}\n\nexport interface MachTableToolbarProps<TData = any> {\n api?: GridApi<TData> | null;\n commands?: MachTableCommands | null;\n search?: string;\n onSearchChange?(value: string): void;\n onRefresh?(): void;\n onClearSelection?(): void;\n loading?: boolean;\n selectedCount?: number;\n searchPlaceholder?: string;\n exportFilename?: string;\n features?: MachTableToolbarFeatures;\n start?: ReactNode;\n children?: ReactNode;\n end?: ReactNode;\n}\n\nconst DEFAULT_FEATURES: Required<MachTableToolbarFeatures> = {\n search: true, refresh: true, columns: true, density: true,\n export: true, undoRedo: false, fullscreen: false\n};\n\nfunction enabled(features: MachTableToolbarFeatures | undefined, key: keyof MachTableToolbarFeatures): boolean {\n return features?.[key] ?? DEFAULT_FEATURES[key];\n}\n\nfunction button(label: string, icon: string, onClick: (event: ReactMouseEvent<HTMLButtonElement>) => void, disabled = false) {\n return createElement(\"button\", {\n key: label, type: \"button\", className: \"mach-toolbar__button\", title: label, \"aria-label\": label, disabled, onClick\n }, icon);\n}\n\nfunction renderMain<TData>(props: MachTableToolbarProps<TData>): ReactNode[] {\n const main: ReactNode[] = [props.start];\n const placeholder = props.searchPlaceholder ?? \"搜索当前结果\";\n if (enabled(props.features, \"search\")) main.push(createElement(\"label\", { className: \"mach-toolbar__search\", key: \"search\" },\n createElement(\"span\", { className: \"mach-sr-only\" }, placeholder),\n createElement(\"span\", { \"aria-hidden\": true }, \"⌕\"),\n createElement(\"input\", {\n type: \"search\",\n value: props.search ?? \"\",\n placeholder,\n onChange: (event: ChangeEvent<HTMLInputElement>) => {\n const value = event.currentTarget.value;\n props.onSearchChange?.(value);\n if (!props.onSearchChange) {\n if (props.commands) props.commands.search(value || null);\n else props.api?.setQuickFilter(value || null);\n }\n }\n })\n ));\n if (enabled(props.features, \"refresh\")) main.push(button(\"刷新\", props.loading ? \"…\" : \"↻\", () => {\n props.onRefresh?.();\n if (!props.onRefresh) {\n if (props.commands) void props.commands.refresh();\n else if (props.api?.isInfinite()) void props.api.reload();\n else props.api?.refreshCells();\n }\n }, props.loading));\n if (enabled(props.features, \"columns\")) main.push(button(\"列设置\", \"☷\", (event) => {\n if (props.commands) props.commands.openColumns(event.currentTarget);\n else props.api?.openColumnWorkbench(event.currentTarget);\n }));\n if (enabled(props.features, \"density\")) main.push(createElement(\"select\", {\n key: \"density\",\n className: \"mach-toolbar__select\",\n value: props.api?.getGridOption(\"size\") ?? \"normal\",\n \"aria-label\": \"表格密度\",\n onChange: (event: ChangeEvent<HTMLSelectElement>) => {\n const size = event.currentTarget.value as GridSize;\n if (props.commands) props.commands.setDensity(size);\n else props.api?.setGridOption(\"size\", size);\n }\n }, createElement(\"option\", { value: \"compact\" }, \"紧凑\"), createElement(\"option\", { value: \"normal\" }, \"标准\"), createElement(\"option\", { value: \"large\" }, \"宽松\")));\n main.push(props.children);\n return main;\n}\n\nfunction runUndo<TData>(props: MachTableToolbarProps<TData>): void {\n if (props.commands) props.commands.undo();\n else props.api?.undo();\n}\n\nfunction runRedo<TData>(props: MachTableToolbarProps<TData>): void {\n if (props.commands) props.commands.redo();\n else props.api?.redo();\n}\n\nfunction renderAside<TData>(props: MachTableToolbarProps<TData>): ReactNode[] {\n const aside: ReactNode[] = [];\n if ((props.selectedCount ?? 0) > 0) aside.push(createElement(\"button\", {\n type: \"button\", className: \"mach-toolbar__selection\", onClick: () => props.onClearSelection?.()\n }, `已选 ${props.selectedCount} 项 ×`));\n if (enabled(props.features, \"undoRedo\")) {\n aside.push(button(\"撤销\", \"↶\", () => runUndo(props), props.commands ? !props.commands.canUndo() : !props.api?.canUndo()));\n aside.push(button(\"重做\", \"↷\", () => runRedo(props), props.commands ? !props.commands.canRedo() : !props.api?.canRedo()));\n }\n if (enabled(props.features, \"export\")) aside.push(button(\"导出 CSV\", \"⇩\", () => { props.commands?.exportCsv(props.exportFilename); }, !props.commands));\n if (enabled(props.features, \"fullscreen\")) aside.push(button(\"全屏\", \"⛶\", () => { void props.commands?.toggleFullscreen(); }, !props.commands));\n aside.push(props.end);\n return aside;\n}\n\nexport function MachTableToolbar<TData = any>(props: MachTableToolbarProps<TData>) {\n return createElement(\"div\", { className: \"mach-toolbar\", role: \"toolbar\", \"aria-label\": \"表格工具栏\" },\n createElement(\"div\", { className: \"mach-toolbar__main\" }, ...renderMain(props)),\n createElement(\"div\", { className: \"mach-toolbar__aside\" }, ...renderAside(props))\n );\n}\n","import { createElement, isValidElement, type ComponentType, type ReactNode } from \"react\";\nimport { createRoot } from \"react-dom/client\";\nimport type { CellRendererParams, CellRendererFn, DetailRowRendererParams, GridApi, RowNode } from \"@agile-team/mach-table\";\n\nexport interface ReactCellRendererProps<TData = any, TValue = any> extends CellRendererParams<TData, TValue> {\n children?: ReactNode;\n}\n\nexport interface ReactDetailProps<TData = any> {\n data: TData | null;\n node: RowNode<TData>;\n api: GridApi<TData>;\n}\n\nexport function reactCellRenderer<TData = any, TValue = any>(\n Component: ComponentType<ReactCellRendererProps<TData, TValue>>\n): CellRendererFn {\n return (params) => {\n const host = document.createElement(\"div\");\n host.className = \"mach-cell-react\";\n host.style.width = \"100%\";\n const root = createRoot(host);\n root.render(createElement(Component, params as ReactCellRendererProps<TData, TValue>));\n let destroyed = false;\n return {\n el: host,\n destroy: () => {\n if (destroyed) return;\n destroyed = true;\n window.setTimeout(() => {\n root.unmount();\n }, 0);\n }\n };\n };\n}\n\nexport function reactDetailRenderer<TData = any>(\n Component: ComponentType<ReactDetailProps<TData>>\n): (params: DetailRowRendererParams<TData>) => { el: HTMLElement; destroy?: () => void } {\n return (params) => {\n const host = document.createElement(\"div\");\n host.style.height = \"100%\";\n const root = createRoot(host);\n root.render(createElement(Component, params));\n let destroyed = false;\n return {\n el: host,\n destroy: () => {\n if (destroyed) return;\n destroyed = true;\n window.setTimeout(() => {\n root.unmount();\n }, 0);\n }\n };\n };\n}\n\nexport function isReactElement(value: unknown): boolean {\n return isValidElement(value);\n}\n","import { MachTable, RobotGrid } from \"./MachTable\";\n\nexport { MachTable, RobotGrid };\nexport type { MachTableReactProps, RobotGridReactProps } from \"./MachTable\";\nexport { useMachGrid } from \"./useMachGrid\";\nexport type { UseMachGridReturn } from \"./useMachGrid\";\nexport { useMachTableEditing } from \"./useMachTableEditing\";\nexport type { UseMachTableEditingOptions, UseMachTableEditingReturn } from \"./useMachTableEditing\";\nexport { useMachTableQuery } from \"./useMachTableQuery\";\nexport type {\n MachTablePageRequest,\n MachTablePageResult,\n MachTableQuerySource,\n MachTableRemoteSelectionState,\n UseMachTableQueryOptions,\n UseMachTableQueryReturn\n} from \"./useMachTableQuery\";\nexport { useMachTableController } from \"./useMachTableController\";\nexport type { UseMachTableControllerOptions, UseMachTableControllerReturn } from \"./useMachTableController\";\nexport { MachTableToolbar } from \"./MachTableToolbar\";\nexport type { MachTableToolbarFeatures, MachTableToolbarProps } from \"./MachTableToolbar\";\nexport { MachTableProvider, useMachTableConfig, useMachTableDefaults } from \"./defaults\";\nexport type { MachTableProviderProps } from \"./defaults\";\nexport { reactCellRenderer, reactDetailRenderer } from \"./adapters\";\nexport type { ReactCellRendererProps, ReactDetailProps } from \"./adapters\";\nexport * from \"@agile-team/mach-table\";\n\n/** Enables `React.lazy(() => import(\"@agile-team/mach-table-react\"))`. */\nexport default MachTable;\n"],"mappings":"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","names":["createElement","useEffect","useRef","createGrid","GRID_OPTION_KEYS","EVENT_TYPES","resolveMachTableGridOptions","createContext","createElement","useContext","useMemo","mergeMachTableConfig","normalizeMachTableConfig","ROOT_CONFIG","MachTableConfigContext","MachTableProvider","config","defaults","children","parent","value","useMachTableDefaults","useMachTableConfig","collectGridOptions","props","config","explicit","key","GRID_OPTION_KEYS","value","resolveMachTableGridOptions","MachTable","className","style","apiRef","hostRef","useRef","gridApiRef","propsRef","useMachTableConfig","effectiveInputs","effectiveCache","index","effectiveOptions","effectiveRef","useEffect","host","options","eventType","EVENT_TYPES","handlerKey","event","defaultHandler","handler","api","createGrid","assigned","optionValues","previousOptionValues","previous","changed","createElement","RobotGrid","createElement","DEFAULT_FEATURES","enabled","features","key","button","label","icon","onClick","disabled","renderMain","props","main","placeholder","event","value","size","runUndo","runRedo","renderAside","aside","MachTableToolbar","createElement","isValidElement","createRoot","reactCellRenderer","Component","params","host","root","destroyed","reactDetailRenderer","src_default","MachTable"]}
|
package/dist/mach-table.css
CHANGED
|
@@ -67,6 +67,113 @@
|
|
|
67
67
|
font-variant-numeric: tabular-nums;
|
|
68
68
|
}
|
|
69
69
|
|
|
70
|
+
.mach-root.mach-dom-layout--auto-height {
|
|
71
|
+
height: auto;
|
|
72
|
+
min-height: 0;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
.mach-root.mach-dom-layout--auto-height .mach-body {
|
|
76
|
+
flex: none;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.mach-root.mach-dom-layout--auto-height .mach-body-viewport--scroll {
|
|
80
|
+
overflow-y: hidden;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
.mach-toolbar {
|
|
84
|
+
display: flex;
|
|
85
|
+
align-items: center;
|
|
86
|
+
justify-content: space-between;
|
|
87
|
+
gap: 10px;
|
|
88
|
+
min-height: 44px;
|
|
89
|
+
padding: 6px 8px;
|
|
90
|
+
font: 13px/1.4 var(--mach-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif);
|
|
91
|
+
color: var(--mach-body-fg, #26303f);
|
|
92
|
+
background: var(--mach-body-bg, #fff);
|
|
93
|
+
border: 1px solid var(--mach-border-color, #e6eaf0);
|
|
94
|
+
border-bottom: 0;
|
|
95
|
+
border-radius: var(--mach-radius-lg, 8px) var(--mach-radius-lg, 8px) 0 0;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
.mach-toolbar__main,
|
|
99
|
+
.mach-toolbar__aside {
|
|
100
|
+
display: flex;
|
|
101
|
+
align-items: center;
|
|
102
|
+
gap: 6px;
|
|
103
|
+
min-width: 0;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
.mach-toolbar__search {
|
|
107
|
+
display: flex;
|
|
108
|
+
align-items: center;
|
|
109
|
+
gap: 6px;
|
|
110
|
+
width: min(240px, 32vw);
|
|
111
|
+
height: 32px;
|
|
112
|
+
padding: 0 9px;
|
|
113
|
+
color: #64748b;
|
|
114
|
+
background: var(--mach-header-bg, #fafbfd);
|
|
115
|
+
border: 1px solid var(--mach-border-color, #e6eaf0);
|
|
116
|
+
border-radius: 6px;
|
|
117
|
+
transition: border-color var(--mach-transition, .15s ease), box-shadow var(--mach-transition, .15s ease);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
.mach-toolbar__search:focus-within {
|
|
121
|
+
border-color: var(--mach-primary, #2563eb);
|
|
122
|
+
box-shadow: 0 0 0 2px color-mix(in srgb, var(--mach-primary, #2563eb) 12%, transparent);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
.mach-toolbar__search input {
|
|
126
|
+
min-width: 0;
|
|
127
|
+
width: 100%;
|
|
128
|
+
color: inherit;
|
|
129
|
+
background: transparent;
|
|
130
|
+
border: 0;
|
|
131
|
+
outline: 0;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
.mach-toolbar__button,
|
|
135
|
+
.mach-toolbar__select,
|
|
136
|
+
.mach-toolbar__selection {
|
|
137
|
+
height: 32px;
|
|
138
|
+
padding: 0 10px;
|
|
139
|
+
color: inherit;
|
|
140
|
+
background: var(--mach-body-bg, #fff);
|
|
141
|
+
border: 1px solid var(--mach-border-color, #e6eaf0);
|
|
142
|
+
border-radius: 6px;
|
|
143
|
+
cursor: pointer;
|
|
144
|
+
transition: color var(--mach-transition, .15s ease), border-color var(--mach-transition, .15s ease), background var(--mach-transition, .15s ease);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
.mach-toolbar__button {
|
|
148
|
+
min-width: 32px;
|
|
149
|
+
padding: 0 8px;
|
|
150
|
+
font-size: 16px;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
.mach-toolbar__button:hover:not(:disabled),
|
|
154
|
+
.mach-toolbar__select:hover {
|
|
155
|
+
color: var(--mach-primary, #2563eb);
|
|
156
|
+
border-color: var(--mach-primary, #2563eb);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
.mach-toolbar__button:disabled {
|
|
160
|
+
cursor: not-allowed;
|
|
161
|
+
opacity: .45;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
.mach-toolbar__selection {
|
|
165
|
+
color: var(--mach-primary, #2563eb);
|
|
166
|
+
background: var(--mach-primary-weak, #dbeafe);
|
|
167
|
+
border-color: transparent;
|
|
168
|
+
font-size: 12px;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
@media (max-width: 640px) {
|
|
172
|
+
.mach-toolbar { align-items: stretch; flex-direction: column; }
|
|
173
|
+
.mach-toolbar__main, .mach-toolbar__aside { flex-wrap: wrap; }
|
|
174
|
+
.mach-toolbar__search { flex: 1; width: auto; }
|
|
175
|
+
}
|
|
176
|
+
|
|
70
177
|
.mach-size--compact {
|
|
71
178
|
--mach-font-size: 12px;
|
|
72
179
|
--mach-cell-padding: 6px;
|
|
@@ -531,6 +638,23 @@ input.mach-select-all {
|
|
|
531
638
|
transform: rotate(90deg);
|
|
532
639
|
}
|
|
533
640
|
|
|
641
|
+
.mach-detail-toggle--loading {
|
|
642
|
+
animation: mach-tree-spin 0.8s linear infinite;
|
|
643
|
+
color: var(--mach-primary);
|
|
644
|
+
}
|
|
645
|
+
|
|
646
|
+
.mach-detail-toggle--error {
|
|
647
|
+
color: #dc2626;
|
|
648
|
+
}
|
|
649
|
+
|
|
650
|
+
@keyframes mach-tree-spin {
|
|
651
|
+
to { transform: rotate(360deg); }
|
|
652
|
+
}
|
|
653
|
+
|
|
654
|
+
@media (prefers-reduced-motion: reduce) {
|
|
655
|
+
.mach-detail-toggle--loading { animation: none; }
|
|
656
|
+
}
|
|
657
|
+
|
|
534
658
|
.mach-cell--group {
|
|
535
659
|
cursor: pointer;
|
|
536
660
|
background: var(--mach-header-bg);
|
|
@@ -637,6 +761,11 @@ input.mach-select-all {
|
|
|
637
761
|
box-shadow: 0 0 0 1px rgba(239, 68, 68, 0.35);
|
|
638
762
|
}
|
|
639
763
|
|
|
764
|
+
.mach-editor-validating {
|
|
765
|
+
cursor: progress;
|
|
766
|
+
opacity: 0.72;
|
|
767
|
+
}
|
|
768
|
+
|
|
640
769
|
.mach-footer {
|
|
641
770
|
display: flex;
|
|
642
771
|
flex-shrink: 0;
|
|
@@ -1025,11 +1154,33 @@ input.mach-select-all {
|
|
|
1025
1154
|
}
|
|
1026
1155
|
|
|
1027
1156
|
.mach-column-panel {
|
|
1028
|
-
min-width:
|
|
1157
|
+
min-width: 220px;
|
|
1029
1158
|
max-height: 70vh;
|
|
1030
1159
|
overflow: auto;
|
|
1031
1160
|
}
|
|
1032
1161
|
|
|
1162
|
+
.mach-column-panel[role="dialog"] {
|
|
1163
|
+
width: min(440px, calc(100vw - 16px));
|
|
1164
|
+
}
|
|
1165
|
+
|
|
1166
|
+
.mach-column-workbench-search {
|
|
1167
|
+
box-sizing: border-box;
|
|
1168
|
+
width: 100%;
|
|
1169
|
+
height: 30px;
|
|
1170
|
+
padding: 0 9px;
|
|
1171
|
+
border: 1px solid var(--mach-border-color);
|
|
1172
|
+
border-radius: var(--mach-radius);
|
|
1173
|
+
background: var(--mach-body-bg);
|
|
1174
|
+
color: var(--mach-body-fg);
|
|
1175
|
+
font: inherit;
|
|
1176
|
+
outline: none;
|
|
1177
|
+
}
|
|
1178
|
+
|
|
1179
|
+
.mach-column-workbench-search:focus {
|
|
1180
|
+
border-color: var(--mach-primary);
|
|
1181
|
+
box-shadow: 0 0 0 2px var(--mach-primary-weak);
|
|
1182
|
+
}
|
|
1183
|
+
|
|
1033
1184
|
.mach-column-panel-title {
|
|
1034
1185
|
font-weight: 600;
|
|
1035
1186
|
color: var(--mach-header-fg);
|
|
@@ -1076,7 +1227,7 @@ input.mach-select-all {
|
|
|
1076
1227
|
}
|
|
1077
1228
|
|
|
1078
1229
|
.mach-column-panel-list {
|
|
1079
|
-
max-height:
|
|
1230
|
+
max-height: 280px;
|
|
1080
1231
|
overflow: auto;
|
|
1081
1232
|
display: flex;
|
|
1082
1233
|
flex-direction: column;
|
|
@@ -1086,6 +1237,54 @@ input.mach-select-all {
|
|
|
1086
1237
|
padding: 4px;
|
|
1087
1238
|
}
|
|
1088
1239
|
|
|
1240
|
+
.mach-column-workbench-item {
|
|
1241
|
+
display: grid;
|
|
1242
|
+
grid-template-columns: minmax(120px, 1fr) 108px 26px 26px;
|
|
1243
|
+
align-items: center;
|
|
1244
|
+
gap: 4px;
|
|
1245
|
+
min-height: 32px;
|
|
1246
|
+
padding: 2px 3px;
|
|
1247
|
+
border-radius: var(--mach-radius);
|
|
1248
|
+
}
|
|
1249
|
+
|
|
1250
|
+
.mach-column-workbench-item:hover {
|
|
1251
|
+
background: var(--mach-row-hover-bg);
|
|
1252
|
+
}
|
|
1253
|
+
|
|
1254
|
+
.mach-column-workbench-label {
|
|
1255
|
+
display: flex;
|
|
1256
|
+
min-width: 0;
|
|
1257
|
+
align-items: center;
|
|
1258
|
+
gap: 7px;
|
|
1259
|
+
cursor: pointer;
|
|
1260
|
+
}
|
|
1261
|
+
|
|
1262
|
+
.mach-column-workbench-name {
|
|
1263
|
+
overflow: hidden;
|
|
1264
|
+
text-overflow: ellipsis;
|
|
1265
|
+
white-space: nowrap;
|
|
1266
|
+
}
|
|
1267
|
+
|
|
1268
|
+
.mach-column-workbench-pin,
|
|
1269
|
+
.mach-column-workbench-move {
|
|
1270
|
+
height: 26px;
|
|
1271
|
+
border: 1px solid var(--mach-border-color);
|
|
1272
|
+
border-radius: var(--mach-radius);
|
|
1273
|
+
background: var(--mach-body-bg);
|
|
1274
|
+
color: inherit;
|
|
1275
|
+
font: inherit;
|
|
1276
|
+
}
|
|
1277
|
+
|
|
1278
|
+
.mach-column-workbench-move {
|
|
1279
|
+
padding: 0;
|
|
1280
|
+
cursor: pointer;
|
|
1281
|
+
}
|
|
1282
|
+
|
|
1283
|
+
.mach-column-workbench-move:disabled {
|
|
1284
|
+
cursor: not-allowed;
|
|
1285
|
+
opacity: 0.35;
|
|
1286
|
+
}
|
|
1287
|
+
|
|
1089
1288
|
.mach-tag {
|
|
1090
1289
|
display: inline-flex;
|
|
1091
1290
|
align-items: center;
|
|
@@ -1177,6 +1376,18 @@ input.mach-select-all {
|
|
|
1177
1376
|
gap: 2px;
|
|
1178
1377
|
}
|
|
1179
1378
|
|
|
1379
|
+
.mach-sr-only {
|
|
1380
|
+
position: absolute !important;
|
|
1381
|
+
width: 1px !important;
|
|
1382
|
+
height: 1px !important;
|
|
1383
|
+
padding: 0 !important;
|
|
1384
|
+
margin: -1px !important;
|
|
1385
|
+
overflow: hidden !important;
|
|
1386
|
+
clip: rect(0, 0, 0, 0) !important;
|
|
1387
|
+
white-space: nowrap !important;
|
|
1388
|
+
border: 0 !important;
|
|
1389
|
+
}
|
|
1390
|
+
|
|
1180
1391
|
.mach-action-btn {
|
|
1181
1392
|
display: inline-flex;
|
|
1182
1393
|
align-items: center;
|
|
@@ -1203,6 +1414,50 @@ input.mach-select-all {
|
|
|
1203
1414
|
color: var(--mach-danger);
|
|
1204
1415
|
}
|
|
1205
1416
|
|
|
1417
|
+
.mach-action-btn--primary {
|
|
1418
|
+
color: var(--mach-primary);
|
|
1419
|
+
}
|
|
1420
|
+
|
|
1421
|
+
.mach-action-btn--warning {
|
|
1422
|
+
color: var(--mach-warning);
|
|
1423
|
+
}
|
|
1424
|
+
|
|
1425
|
+
.mach-action-btn--success,
|
|
1426
|
+
.mach-edit-control--confirm {
|
|
1427
|
+
color: var(--mach-success);
|
|
1428
|
+
}
|
|
1429
|
+
|
|
1430
|
+
.mach-action-btn--danger {
|
|
1431
|
+
color: var(--mach-danger);
|
|
1432
|
+
}
|
|
1433
|
+
|
|
1434
|
+
.mach-action-btn:focus-visible,
|
|
1435
|
+
.mach-edit-control:focus-visible,
|
|
1436
|
+
.mach-cell-edit-trigger:focus-visible,
|
|
1437
|
+
.mach-action-drawer__close:focus-visible {
|
|
1438
|
+
outline: 2px solid color-mix(in srgb, var(--mach-primary) 65%, transparent);
|
|
1439
|
+
outline-offset: 1px;
|
|
1440
|
+
}
|
|
1441
|
+
|
|
1442
|
+
.mach-action-btn:disabled {
|
|
1443
|
+
cursor: not-allowed;
|
|
1444
|
+
opacity: 0.4;
|
|
1445
|
+
}
|
|
1446
|
+
|
|
1447
|
+
.mach-action-btn--loading svg {
|
|
1448
|
+
animation: mach-spin 0.8s linear infinite;
|
|
1449
|
+
}
|
|
1450
|
+
|
|
1451
|
+
.mach-dictionary-value--loading {
|
|
1452
|
+
color: var(--mach-header-fg);
|
|
1453
|
+
opacity: 0.72;
|
|
1454
|
+
}
|
|
1455
|
+
|
|
1456
|
+
.mach-dictionary-value--error {
|
|
1457
|
+
text-decoration: underline dotted;
|
|
1458
|
+
text-underline-offset: 3px;
|
|
1459
|
+
}
|
|
1460
|
+
|
|
1206
1461
|
.mach-action-btn--icon {
|
|
1207
1462
|
padding: 0;
|
|
1208
1463
|
width: 24px;
|
|
@@ -1210,7 +1465,262 @@ input.mach-select-all {
|
|
|
1210
1465
|
|
|
1211
1466
|
.mach-context-menu-item--danger {
|
|
1212
1467
|
color: var(--mach-danger);
|
|
1213
|
-
}
|
|
1468
|
+
}
|
|
1469
|
+
|
|
1470
|
+
.mach-context-menu-item,
|
|
1471
|
+
.mach-action-drawer__item {
|
|
1472
|
+
display: flex;
|
|
1473
|
+
align-items: center;
|
|
1474
|
+
gap: 9px;
|
|
1475
|
+
}
|
|
1476
|
+
|
|
1477
|
+
.mach-context-menu-item--primary,
|
|
1478
|
+
.mach-action-drawer__item--primary {
|
|
1479
|
+
color: var(--mach-primary);
|
|
1480
|
+
}
|
|
1481
|
+
|
|
1482
|
+
.mach-context-menu-item--warning,
|
|
1483
|
+
.mach-action-drawer__item--warning {
|
|
1484
|
+
color: var(--mach-warning);
|
|
1485
|
+
}
|
|
1486
|
+
|
|
1487
|
+
.mach-context-menu-item--success,
|
|
1488
|
+
.mach-action-drawer__item--success {
|
|
1489
|
+
color: var(--mach-success);
|
|
1490
|
+
}
|
|
1491
|
+
|
|
1492
|
+
.mach-context-menu-item--danger,
|
|
1493
|
+
.mach-action-drawer__item--danger {
|
|
1494
|
+
color: var(--mach-danger);
|
|
1495
|
+
}
|
|
1496
|
+
|
|
1497
|
+
.mach-action-drawer-backdrop {
|
|
1498
|
+
position: fixed;
|
|
1499
|
+
inset: 0;
|
|
1500
|
+
z-index: calc(var(--mach-z-menu) + 2);
|
|
1501
|
+
background: rgba(15, 23, 42, 0.2);
|
|
1502
|
+
backdrop-filter: blur(1px);
|
|
1503
|
+
}
|
|
1504
|
+
|
|
1505
|
+
.mach-action-drawer {
|
|
1506
|
+
position: absolute;
|
|
1507
|
+
top: 0;
|
|
1508
|
+
right: 0;
|
|
1509
|
+
display: flex;
|
|
1510
|
+
flex-direction: column;
|
|
1511
|
+
width: min(340px, calc(100vw - 24px));
|
|
1512
|
+
height: 100%;
|
|
1513
|
+
background: var(--mach-body-bg);
|
|
1514
|
+
color: var(--mach-body-fg);
|
|
1515
|
+
border-left: 1px solid var(--mach-border-color);
|
|
1516
|
+
box-shadow: -16px 0 40px rgba(15, 23, 42, 0.14);
|
|
1517
|
+
font-family: var(--mach-font-family);
|
|
1518
|
+
animation: mach-drawer-in 0.18s ease-out;
|
|
1519
|
+
}
|
|
1520
|
+
|
|
1521
|
+
.mach-action-drawer__header {
|
|
1522
|
+
display: flex;
|
|
1523
|
+
align-items: center;
|
|
1524
|
+
justify-content: space-between;
|
|
1525
|
+
min-height: 56px;
|
|
1526
|
+
padding: 0 16px 0 20px;
|
|
1527
|
+
border-bottom: 1px solid var(--mach-border-color);
|
|
1528
|
+
}
|
|
1529
|
+
|
|
1530
|
+
.mach-action-drawer__close {
|
|
1531
|
+
display: inline-flex;
|
|
1532
|
+
align-items: center;
|
|
1533
|
+
justify-content: center;
|
|
1534
|
+
width: 30px;
|
|
1535
|
+
height: 30px;
|
|
1536
|
+
padding: 0;
|
|
1537
|
+
border: 0;
|
|
1538
|
+
border-radius: var(--mach-radius);
|
|
1539
|
+
background: transparent;
|
|
1540
|
+
color: var(--mach-header-fg);
|
|
1541
|
+
cursor: pointer;
|
|
1542
|
+
}
|
|
1543
|
+
|
|
1544
|
+
.mach-action-drawer__close:hover {
|
|
1545
|
+
color: var(--mach-primary);
|
|
1546
|
+
background: var(--mach-row-hover-bg);
|
|
1547
|
+
}
|
|
1548
|
+
|
|
1549
|
+
.mach-action-drawer__body {
|
|
1550
|
+
display: flex;
|
|
1551
|
+
flex-direction: column;
|
|
1552
|
+
gap: 4px;
|
|
1553
|
+
padding: 12px;
|
|
1554
|
+
overflow: auto;
|
|
1555
|
+
}
|
|
1556
|
+
|
|
1557
|
+
.mach-action-drawer__item {
|
|
1558
|
+
width: 100%;
|
|
1559
|
+
min-height: 40px;
|
|
1560
|
+
padding: 0 12px;
|
|
1561
|
+
border: 0;
|
|
1562
|
+
border-radius: var(--mach-radius);
|
|
1563
|
+
background: transparent;
|
|
1564
|
+
font: inherit;
|
|
1565
|
+
text-align: left;
|
|
1566
|
+
cursor: pointer;
|
|
1567
|
+
}
|
|
1568
|
+
|
|
1569
|
+
.mach-action-drawer__item:hover:not(:disabled) {
|
|
1570
|
+
background: var(--mach-row-hover-bg);
|
|
1571
|
+
}
|
|
1572
|
+
|
|
1573
|
+
.mach-action-drawer__item:disabled {
|
|
1574
|
+
opacity: 0.4;
|
|
1575
|
+
cursor: not-allowed;
|
|
1576
|
+
}
|
|
1577
|
+
|
|
1578
|
+
@keyframes mach-drawer-in {
|
|
1579
|
+
from { transform: translateX(18px); opacity: 0; }
|
|
1580
|
+
to { transform: translateX(0); opacity: 1; }
|
|
1581
|
+
}
|
|
1582
|
+
|
|
1583
|
+
@media (max-width: 640px) {
|
|
1584
|
+
.mach-action-drawer {
|
|
1585
|
+
top: auto;
|
|
1586
|
+
bottom: 0;
|
|
1587
|
+
width: 100%;
|
|
1588
|
+
height: auto;
|
|
1589
|
+
max-height: min(70vh, 520px);
|
|
1590
|
+
border-top: 1px solid var(--mach-border-color);
|
|
1591
|
+
border-left: 0;
|
|
1592
|
+
border-radius: var(--mach-radius-lg) var(--mach-radius-lg) 0 0;
|
|
1593
|
+
animation-name: mach-drawer-up;
|
|
1594
|
+
}
|
|
1595
|
+
}
|
|
1596
|
+
|
|
1597
|
+
@keyframes mach-drawer-up {
|
|
1598
|
+
from { transform: translateY(18px); opacity: 0; }
|
|
1599
|
+
to { transform: translateY(0); opacity: 1; }
|
|
1600
|
+
}
|
|
1601
|
+
|
|
1602
|
+
.mach-cell:has(.mach-cell-edit-trigger) {
|
|
1603
|
+
padding-right: 29px;
|
|
1604
|
+
}
|
|
1605
|
+
|
|
1606
|
+
.mach-cell-edit-trigger {
|
|
1607
|
+
position: absolute;
|
|
1608
|
+
right: 5px;
|
|
1609
|
+
top: 50%;
|
|
1610
|
+
display: inline-flex;
|
|
1611
|
+
align-items: center;
|
|
1612
|
+
justify-content: center;
|
|
1613
|
+
width: 20px;
|
|
1614
|
+
height: 20px;
|
|
1615
|
+
padding: 0;
|
|
1616
|
+
transform: translateY(-50%);
|
|
1617
|
+
border: 0;
|
|
1618
|
+
border-radius: var(--mach-radius-sm);
|
|
1619
|
+
background: transparent;
|
|
1620
|
+
color: var(--mach-header-fg);
|
|
1621
|
+
cursor: pointer;
|
|
1622
|
+
opacity: 0;
|
|
1623
|
+
transition: opacity var(--mach-transition), color var(--mach-transition), background-color var(--mach-transition);
|
|
1624
|
+
}
|
|
1625
|
+
|
|
1626
|
+
.mach-cell-edit-trigger svg {
|
|
1627
|
+
width: 13px;
|
|
1628
|
+
height: 13px;
|
|
1629
|
+
}
|
|
1630
|
+
|
|
1631
|
+
.mach-cell:hover .mach-cell-edit-trigger--hover,
|
|
1632
|
+
.mach-cell:focus-within .mach-cell-edit-trigger--hover,
|
|
1633
|
+
.mach-cell-edit-trigger--always {
|
|
1634
|
+
opacity: 0.72;
|
|
1635
|
+
}
|
|
1636
|
+
|
|
1637
|
+
.mach-cell-edit-trigger:hover {
|
|
1638
|
+
opacity: 1;
|
|
1639
|
+
color: var(--mach-primary);
|
|
1640
|
+
background: color-mix(in srgb, var(--mach-primary) 9%, transparent);
|
|
1641
|
+
}
|
|
1642
|
+
|
|
1643
|
+
.mach-cell--editing {
|
|
1644
|
+
overflow: visible;
|
|
1645
|
+
z-index: 4;
|
|
1646
|
+
}
|
|
1647
|
+
|
|
1648
|
+
.mach-cell-editor-shell,
|
|
1649
|
+
.mach-row-editor-shell {
|
|
1650
|
+
display: flex;
|
|
1651
|
+
align-items: center;
|
|
1652
|
+
width: 100%;
|
|
1653
|
+
min-width: 0;
|
|
1654
|
+
gap: 5px;
|
|
1655
|
+
}
|
|
1656
|
+
|
|
1657
|
+
.mach-cell-editor-shell > .mach-editor-input,
|
|
1658
|
+
.mach-cell-editor-shell > .mach-editor-select,
|
|
1659
|
+
.mach-cell-editor-shell > :not(.mach-cell-editor-controls),
|
|
1660
|
+
.mach-row-editor-shell > * {
|
|
1661
|
+
flex: 1 1 auto;
|
|
1662
|
+
min-width: 0;
|
|
1663
|
+
}
|
|
1664
|
+
|
|
1665
|
+
.mach-cell-editor-controls {
|
|
1666
|
+
display: inline-flex;
|
|
1667
|
+
flex: 0 0 auto;
|
|
1668
|
+
align-items: center;
|
|
1669
|
+
padding: 2px;
|
|
1670
|
+
border: 1px solid var(--mach-border-color);
|
|
1671
|
+
border-radius: var(--mach-radius);
|
|
1672
|
+
background: var(--mach-body-bg);
|
|
1673
|
+
box-shadow: var(--mach-shadow-sm);
|
|
1674
|
+
}
|
|
1675
|
+
|
|
1676
|
+
.mach-edit-control {
|
|
1677
|
+
display: inline-flex;
|
|
1678
|
+
align-items: center;
|
|
1679
|
+
justify-content: center;
|
|
1680
|
+
width: 23px;
|
|
1681
|
+
height: 23px;
|
|
1682
|
+
padding: 0;
|
|
1683
|
+
border: 0;
|
|
1684
|
+
border-radius: var(--mach-radius-sm);
|
|
1685
|
+
background: transparent;
|
|
1686
|
+
color: var(--mach-header-fg);
|
|
1687
|
+
cursor: pointer;
|
|
1688
|
+
}
|
|
1689
|
+
|
|
1690
|
+
.mach-edit-control svg {
|
|
1691
|
+
width: 14px;
|
|
1692
|
+
height: 14px;
|
|
1693
|
+
}
|
|
1694
|
+
|
|
1695
|
+
.mach-edit-control--confirm {
|
|
1696
|
+
color: var(--mach-primary);
|
|
1697
|
+
}
|
|
1698
|
+
|
|
1699
|
+
.mach-edit-control:hover {
|
|
1700
|
+
background: var(--mach-row-hover-bg);
|
|
1701
|
+
}
|
|
1702
|
+
|
|
1703
|
+
.mach-edit-control:disabled {
|
|
1704
|
+
opacity: 0.35;
|
|
1705
|
+
cursor: wait;
|
|
1706
|
+
}
|
|
1707
|
+
|
|
1708
|
+
.mach-row--editing,
|
|
1709
|
+
.mach-row--editing .mach-cell {
|
|
1710
|
+
background: color-mix(in srgb, var(--mach-primary) 3%, var(--mach-body-bg));
|
|
1711
|
+
}
|
|
1712
|
+
|
|
1713
|
+
.mach-cell--row-editing .mach-editor-input,
|
|
1714
|
+
.mach-cell--row-editing .mach-editor-select {
|
|
1715
|
+
border-color: color-mix(in srgb, var(--mach-primary) 45%, var(--mach-border-color));
|
|
1716
|
+
box-shadow: 0 1px 2px rgba(15, 23, 42, 0.04);
|
|
1717
|
+
}
|
|
1718
|
+
|
|
1719
|
+
.mach-cell--row-editing .mach-editor-input:focus,
|
|
1720
|
+
.mach-cell--row-editing .mach-editor-select:focus {
|
|
1721
|
+
border-color: var(--mach-primary);
|
|
1722
|
+
box-shadow: 0 0 0 2px color-mix(in srgb, var(--mach-primary) 12%, transparent);
|
|
1723
|
+
}
|
|
1214
1724
|
|
|
1215
1725
|
.mach-tooltip {
|
|
1216
1726
|
position: fixed;
|
|
@@ -1381,4 +1891,8 @@ input.mach-select-all {
|
|
|
1381
1891
|
animation-iteration-count: 1 !important;
|
|
1382
1892
|
transition-duration: 0.01ms !important;
|
|
1383
1893
|
}
|
|
1894
|
+
|
|
1895
|
+
.mach-action-drawer {
|
|
1896
|
+
animation: none !important;
|
|
1897
|
+
}
|
|
1384
1898
|
}
|