@agile-team/mach-table 0.30.0 → 0.31.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.
@@ -0,0 +1 @@
1
+ .mach-root{--mach-font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Arial, sans-serif;--mach-font-size: 13px;--mach-font-size-sm: 12px;--mach-header-font-weight: 650;--mach-cell-padding: 9px;--mach-row-h: 36px;--mach-header-h: 40px;--mach-primary: #2563eb;--mach-primary-weak: #dbeafe;--mach-success: #16a34a;--mach-warning: #d97706;--mach-danger: #dc2626;--mach-info: #0284c7;--mach-border-color: #e6eaf0;--mach-row-border-color: #eef1f6;--mach-cell-border-color: transparent;--mach-border-width: 1px;--mach-header-border-width: 1px;--mach-header-accent-color: #d9e1eb;--mach-header-bg: #f4f7fb;--mach-header-group-bg: #edf2f8;--mach-header-fg: #344054;--mach-body-bg: #ffffff;--mach-body-fg: #26303f;--mach-row-hover-bg: #f6f8fa;--mach-row-selected-bg: #eff6ff;--mach-zebra-bg: #fafbfd;--mach-cell-focus-color: #2563eb;--mach-focus-width: 1.5px;--mach-scrollbar-thumb: #c9d2dd;--mach-radius-sm: 4px;--mach-radius: 6px;--mach-radius-lg: 8px;--mach-shadow-sm: 0 1px 4px rgba(15, 23, 42, .08);--mach-shadow: 0 6px 20px rgba(15, 23, 42, .12);--mach-transition: .15s ease;--mach-z-overlay: 10;--mach-z-loading: 15;--mach-z-popup: 1000;--mach-z-menu: 1001;position:relative;display:flex;flex-direction:column;width:100%;height:100%;min-height:120px;overflow:hidden;font-family:var(--mach-font-family);font-size:var(--mach-font-size);color:var(--mach-body-fg);background:var(--mach-body-bg);outline:none;box-sizing:border-box;border:1px solid var(--mach-border-color);color-scheme:light;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-variant-numeric:tabular-nums;contain:layout style}.mach-root.mach-dom-layout--auto-height{height:auto;min-height:0}.mach-root.mach-dom-layout--auto-height .mach-body{flex:none}.mach-root.mach-dom-layout--auto-height .mach-body-viewport--scroll{overflow-y:hidden}.mach-toolbar{display:flex;align-items:center;justify-content:space-between;gap:10px;min-height:44px;padding:6px 8px;font:13px/1.4 var(--mach-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif);color:var(--mach-body-fg, #26303f);background:var(--mach-body-bg, #fff);border:1px solid var(--mach-border-color, #e6eaf0);border-bottom:0;border-radius:var(--mach-radius-lg, 8px) var(--mach-radius-lg, 8px) 0 0}.mach-toolbar__main,.mach-toolbar__aside{display:flex;align-items:center;gap:6px;min-width:0}.mach-toolbar__search{display:flex;align-items:center;gap:6px;width:min(240px,32vw);height:32px;padding:0 9px;color:#64748b;background:var(--mach-header-bg, #fafbfd);border:1px solid var(--mach-border-color, #e6eaf0);border-radius:6px;transition:border-color var(--mach-transition, .15s ease),box-shadow var(--mach-transition, .15s ease)}.mach-toolbar__search:focus-within{border-color:var(--mach-primary, #2563eb);box-shadow:0 0 0 2px color-mix(in srgb,var(--mach-primary, #2563eb) 12%,transparent)}.mach-toolbar__search input{min-width:0;width:100%;color:inherit;background:transparent;border:0;outline:0}.mach-toolbar__button,.mach-toolbar__select-host,.mach-toolbar__selection{height:32px;padding:0 10px;color:inherit;background:var(--mach-body-bg, #fff);border:1px solid var(--mach-border-color, #e6eaf0);border-radius:6px;cursor:pointer;transition:color var(--mach-transition, .15s ease),border-color var(--mach-transition, .15s ease),background var(--mach-transition, .15s ease)}.mach-toolbar__button{min-width:32px;padding:0 8px;font-size:16px}.mach-toolbar__button:hover:not(:disabled),.mach-toolbar__select-host:hover{color:var(--mach-primary, #2563eb);border-color:var(--mach-primary, #2563eb)}.mach-toolbar__button:disabled{cursor:not-allowed;opacity:.45}.mach-toolbar__selection{color:var(--mach-primary, #2563eb);background:var(--mach-primary-weak, #dbeafe);border-color:transparent;font-size:12px}.mach-toolbar__select-host{width:82px;padding:0}.mach-toolbar__select-control,.mach-toolbar__select-control .mach-select-trigger{width:100%;height:100%}.mach-toolbar__select-control .mach-select-trigger{border:0;border-radius:5px;background:transparent;box-shadow:none}@media(max-width:640px){.mach-toolbar{align-items:stretch;flex-direction:column}.mach-toolbar__main,.mach-toolbar__aside{flex-wrap:wrap}.mach-toolbar__search{flex:1;width:auto}}.mach-size--compact{--mach-font-size: 12px;--mach-cell-padding: 6px}.mach-size--normal{--mach-font-size: 13px;--mach-cell-padding: 9px}.mach-size--large{--mach-font-size: 14px;--mach-cell-padding: 12px}.mach-root.mach-cell-borders{--mach-cell-border-color: var(--mach-border-color)}.mach-root.mach-theme-dark,.mach-root.mach-theme-dark.mach-size--compact,.mach-root.mach-theme-dark.mach-size--normal,.mach-root.mach-theme-dark.mach-size--large{--mach-border-color: #26324a;--mach-row-border-color: #1c2740;--mach-header-accent-color: #33415e;--mach-header-bg: #101a2e;--mach-header-group-bg: #16213a;--mach-header-fg: #c3cee0;--mach-body-bg: #0d1526;--mach-body-fg: #dbe4f0;--mach-row-hover-bg: #142138;--mach-row-selected-bg: #14304f;--mach-zebra-bg: #0f1a2e;--mach-cell-focus-color: #60a5fa;--mach-primary: #60a5fa;--mach-primary-weak: #1e3a5f;--mach-scrollbar-thumb: #33415e;--mach-success: #4ade80;--mach-warning: #fbbf24;--mach-danger: #f87171;--mach-info: #38bdf8;--mach-shadow-sm: 0 1px 4px rgba(0, 0, 0, .4);--mach-shadow: 0 6px 20px rgba(0, 0, 0, .5);color-scheme:dark}.mach-root *,.mach-root *:before,.mach-root *:after{box-sizing:border-box}.mach-portal,.mach-portal *,.mach-portal *:before,.mach-portal *:after{box-sizing:border-box}.mach-root:focus-visible{outline:2px solid var(--mach-primary);outline-offset:-2px}.mach-header{display:flex;flex-shrink:0;width:100%;height:var(--mach-header-h);background:var(--mach-header-bg);border-bottom:var(--mach-header-border-width) solid var(--mach-header-accent-color);box-shadow:0 1px 2px color-mix(in srgb,var(--mach-header-fg) 8%,transparent);overflow:hidden;position:relative;z-index:3;user-select:none}.mach-body{display:flex;flex:1;min-height:0;width:100%;position:relative;overflow:hidden}.mach-pane{position:relative;overflow:hidden;flex-shrink:0}.mach-pane--center{flex:1 1 auto;min-width:0}.mach-pane--hidden{display:none}.mach-header-viewport{width:100%;height:100%;overflow:hidden}.mach-header-rows{position:relative;height:100%;width:100%}.mach-header-row{position:absolute;left:0}.mach-header-row .mach-header-cell{position:absolute;top:0}.mach-header-cell--group{justify-content:center;border-bottom:var(--mach-border-width) solid var(--mach-border-color);font-weight:var(--mach-header-font-weight);background:var(--mach-header-group-bg)}.mach-header-label--custom{display:inline-flex;align-items:center;min-width:0;overflow:hidden}.mach-header-cell{display:flex;align-items:center;gap:4px;padding:0 var(--mach-cell-padding);border-right:var(--mach-border-width) solid transparent;color:var(--mach-header-fg);font-weight:var(--mach-header-font-weight);font-size:var(--mach-font-size);letter-spacing:.15px;cursor:default;overflow:hidden;white-space:nowrap;background:var(--mach-header-bg);transition:color var(--mach-transition),background-color var(--mach-transition)}.mach-header-cell--leaf:hover{background:color-mix(in srgb,var(--mach-primary) 4%,var(--mach-header-bg))}.mach-header-cell.mach-header-cell--sorted{color:var(--mach-primary);background:color-mix(in srgb,var(--mach-primary) 5%,var(--mach-header-bg))}.mach-root.mach-cell-borders .mach-header-cell{border-right-color:var(--mach-border-color)}.mach-header-label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;cursor:pointer}.mach-header-cell--selection{justify-content:center;gap:0;padding:0}.mach-header-cell--selection .mach-header-label:empty{display:none}.mach-sort-indicator{display:inline-flex;align-items:center;gap:3px;color:var(--mach-primary);flex-shrink:0}.mach-sort-indicator svg{width:10px;height:10px}.mach-sort-indicator:empty{display:none}.mach-sort-badge{font-size:9px;line-height:1;padding:1.5px 4px;border-radius:999px;background:var(--mach-primary-weak);color:var(--mach-primary);font-weight:600}.mach-filter-btn{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;padding:0;border:none;border-radius:var(--mach-radius-sm);background:transparent;color:inherit;opacity:.36;cursor:pointer;flex-shrink:0;transition:opacity var(--mach-transition),color var(--mach-transition),background-color var(--mach-transition)}.mach-filter-btn svg{width:12px;height:12px;pointer-events:none}.mach-header-cell:hover .mach-filter-btn,.mach-header-cell:hover .mach-menu-btn{opacity:.62}.mach-filter-btn:hover{opacity:1;background:var(--mach-row-hover-bg)}.mach-filter-btn--active{opacity:1;color:var(--mach-primary)}.mach-filter-tag{display:inline-flex;align-items:center;max-width:96px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:0 6px;height:16px;line-height:16px;border-radius:999px;background:var(--mach-primary-weak);color:var(--mach-primary);font-size:10px;font-weight:500;flex-shrink:0}.mach-menu-btn{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;padding:0;border:none;border-radius:var(--mach-radius-sm);background:transparent;color:inherit;opacity:.36;cursor:pointer;flex-shrink:0;font-size:12px;line-height:1;transition:opacity var(--mach-transition),color var(--mach-transition),background-color var(--mach-transition)}.mach-menu-btn:hover{opacity:1;background:var(--mach-row-hover-bg)}.mach-menu-btn svg{width:12px;height:12px;pointer-events:none}.mach-header-resize{position:absolute;top:0;right:0;width:8px;height:100%;cursor:col-resize;z-index:2;touch-action:none}.mach-header-resize:hover:after,.mach-header-resize--active:after{content:"";position:absolute;inset:0 3px;background:var(--mach-primary);opacity:.45;border-radius:1px}.mach-column-resize-guide{position:absolute;bottom:0;width:2px;pointer-events:none;background:var(--mach-primary);box-shadow:0 0 0 1px var(--mach-primary-weak);z-index:8}.mach-column-resize-label{position:absolute;top:6px;min-width:52px;padding:3px 7px;border-radius:var(--mach-radius-sm);color:#fff;background:var(--mach-primary);font:600 11px/1.5 var(--mach-font-family);text-align:center;white-space:nowrap;transform:translate(-50%);box-shadow:var(--mach-shadow-sm)}.mach-header-cell--dragging{opacity:.22}.mach-column-drag-ghost{position:fixed;top:0;left:0;z-index:calc(var(--mach-z-menu) + 1);display:flex;align-items:center;height:var(--mach-header-h);max-width:calc(100vw - 16px);padding:0 var(--mach-cell-padding);overflow:hidden;color:var(--mach-body-fg);font:var(--mach-header-font-weight) var(--mach-font-size)/1.3 var(--mach-font-family);text-overflow:ellipsis;white-space:nowrap;pointer-events:none;background:var(--mach-body-bg);border:1px solid var(--mach-primary);border-radius:var(--mach-radius);box-shadow:var(--mach-shadow);opacity:.96;will-change:transform}.mach-drop-indicator{position:absolute;top:3px;left:0;width:2px;height:calc(100% - 6px);border-radius:2px;background:var(--mach-primary);z-index:4;pointer-events:none;will-change:transform}.mach-root--dragging{cursor:grabbing}.mach-root--dragging .mach-header-cell,.mach-root--resizing .mach-header-cell{cursor:default}.mach-root--resizing{cursor:col-resize}.mach-body-viewport{position:relative;width:100%;height:100%;overflow:hidden}.mach-body-viewport--scroll{overflow:auto;overscroll-behavior:contain}.mach-body-viewport--scroll{scrollbar-width:thin;scrollbar-color:var(--mach-scrollbar-thumb) transparent}.mach-body-viewport--scroll::-webkit-scrollbar{width:10px;height:10px}.mach-body-viewport--scroll::-webkit-scrollbar-track{background:transparent}.mach-body-viewport--scroll::-webkit-scrollbar-thumb{background:var(--mach-scrollbar-thumb);border-radius:999px;border:3px solid transparent;background-clip:padding-box;transition:background-color var(--mach-transition)}.mach-body-viewport--scroll::-webkit-scrollbar-thumb:hover{background:color-mix(in srgb,var(--mach-scrollbar-thumb) 60%,var(--mach-primary));background-clip:padding-box}.mach-body-viewport--scroll::-webkit-scrollbar-thumb:active{background:var(--mach-primary);background-clip:padding-box}.mach-body-viewport--scroll::-webkit-scrollbar-corner{background:transparent}.mach-row-container{position:relative;width:100%}.mach-row{position:absolute;top:0;left:0;display:flex;width:100%;background:var(--mach-body-bg);border-bottom:var(--mach-border-width) solid var(--mach-row-border-color);contain:layout style}.mach-row,.mach-row .mach-cell{transition:background-color var(--mach-transition)}.mach-root.mach-striped .mach-row--odd,.mach-root.mach-striped .mach-row--odd .mach-cell{background:var(--mach-zebra-bg)}.mach-cell{position:absolute;top:0;display:flex;align-items:center;height:100%;padding:0 var(--mach-cell-padding);border-right:1px solid var(--mach-cell-border-color);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;cursor:default;line-height:calc(var(--mach-row-h) - 2px)}.mach-cell--loading{pointer-events:none}.mach-cell-loading-bar{display:block;height:8px;max-width:132px;border-radius:999px;background:linear-gradient(90deg,var(--mach-row-hover-bg),var(--mach-border-color),var(--mach-row-hover-bg));background-size:200% 100%;animation:mach-cell-loading 1.25s ease-in-out infinite}@keyframes mach-cell-loading{0%{background-position:200% 0}to{background-position:-200% 0}}@media(prefers-reduced-motion:reduce){.mach-cell-loading-bar{animation:none}}.mach-cell--num{justify-content:flex-end}.mach-cell--selection{justify-content:center;padding:0}.mach-cell--editing{padding:0 3px}.mach-cell--focus{box-shadow:inset 0 0 0 var(--mach-focus-width) var(--mach-cell-focus-color);border-radius:var(--mach-radius-sm);z-index:1}.mach-cell--selection.mach-cell--focus{box-shadow:none;border-radius:0;z-index:auto}.mach-row--hover,.mach-row--hover .mach-cell{background:var(--mach-row-hover-bg)}.mach-row--selected,.mach-row--selected .mach-cell{background:var(--mach-row-selected-bg)}.mach-row--selected.mach-row--hover,.mach-row--selected.mach-row--hover .mach-cell{background:var(--mach-row-selected-bg);filter:brightness(.985)}input.mach-row-checkbox,input.mach-select-all{width:13px;height:13px;margin:0;accent-color:var(--mach-primary);cursor:pointer;flex-shrink:0}.mach-detail-row{background:var(--mach-zebra-bg);z-index:0}.mach-detail{height:100%;overflow:auto;padding:10px 12px}.mach-cell--detail-toggle{justify-content:center;padding:0;cursor:pointer}.mach-detail-toggle{display:inline-flex;align-items:center;justify-content:center;width:100%;font-size:10px;color:var(--mach-header-fg);transition:transform .15s ease}.mach-detail-toggle--open{transform:rotate(90deg)}.mach-detail-toggle--loading{animation:mach-tree-spin .8s linear infinite;color:var(--mach-primary)}.mach-detail-toggle--error{color:#dc2626}@keyframes mach-tree-spin{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce){.mach-detail-toggle--loading{animation:none}}.mach-cell--group{cursor:pointer;background:var(--mach-header-bg)}.mach-row .mach-cell--group,.mach-row:has(.mach-cell--group){background:var(--mach-header-bg)}.mach-group-label{display:inline-flex;align-items:center;gap:5px;min-width:0;overflow:hidden}.mach-group-text{font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mach-group-count{color:var(--mach-header-fg);font-size:10px;flex-shrink:0;opacity:.8}.mach-tree-cell{display:inline-flex;align-items:center;gap:4px;min-width:0;width:100%}.mach-tree-indent{flex-shrink:0}.mach-tree-toggle{display:inline-flex;align-items:center;justify-content:center;flex:0 0 20px;width:20px;height:22px;padding:0;border:0;border-radius:var(--mach-radius-sm);color:var(--mach-header-fg);background:transparent;cursor:pointer}.mach-tree-toggle:hover,.mach-tree-toggle:focus-visible{color:var(--mach-primary);background:var(--mach-primary-weak)}.mach-tree-toggle:focus-visible{outline:1px solid var(--mach-primary);outline-offset:-1px}.mach-tree-toggle>.mach-detail-toggle{width:10px;line-height:1;color:inherit;pointer-events:none}.mach-tree-toggle>.mach-detail-toggle--loading{color:var(--mach-primary)}.mach-tree-toggle>.mach-detail-toggle--error{color:var(--mach-danger)}.mach-tree-toggle-spacer{flex:0 0 20px;width:20px}.mach-tree-text{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mach-cell--drag{justify-content:center;padding:0;cursor:grab}.mach-row-drag-handle{display:grid;place-items:center;width:26px;height:26px;padding:0;border:1px solid transparent;border-radius:var(--mach-radius-sm);color:var(--mach-header-fg);background:transparent;opacity:.55;cursor:grab;user-select:none;touch-action:none;transition:color var(--mach-transition),background var(--mach-transition),opacity var(--mach-transition)}.mach-row-drag-handle:before{content:"";width:10px;height:14px;background:radial-gradient(circle,currentColor 1.3px,transparent 1.5px) 0 0 / 5px 5px}.mach-row-drag-handle:hover:not(:disabled),.mach-row-drag-handle:focus-visible{opacity:1;color:var(--mach-primary);background:var(--mach-primary-weak);border-color:color-mix(in srgb,var(--mach-primary) 28%,transparent);outline:none}.mach-row-drag-handle:disabled{opacity:.2;cursor:not-allowed}.mach-row-drop-indicator{position:absolute;top:0;left:0;width:100%;height:2px;background:var(--mach-primary);box-shadow:0 0 0 1px color-mix(in srgb,var(--mach-body-bg) 65%,transparent);z-index:5;pointer-events:none;will-change:transform}.mach-row-drop-indicator:before{content:"";position:absolute;left:1px;top:-2px;width:6px;height:6px;border-radius:50%;background:var(--mach-primary)}.mach-pane--center .mach-row-drop-indicator:before,.mach-pane--right .mach-row-drop-indicator:before{display:none}.mach-row-drag-preview{position:absolute;top:0;left:0;z-index:var(--mach-z-overlay);max-width:min(216px,calc(100% - 16px));padding:9px 14px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border:1px solid color-mix(in srgb,var(--mach-primary) 35%,var(--mach-border-color));border-radius:var(--mach-radius);background:var(--mach-body-bg);color:var(--mach-body-fg);box-shadow:var(--mach-shadow);font-weight:600;pointer-events:none}.mach-root--row-dragging,.mach-root--row-dragging .mach-cell,.mach-root--row-dragging .mach-row-drag-handle{cursor:grabbing;user-select:none}.mach-root .mach-row--drag-source{opacity:.45}.mach-cell--index{color:var(--mach-header-fg);font-size:calc(var(--mach-font-size) - 1px)}.mach-editor-input.mach-editor-invalid,.mach-editor-invalid .mach-editor-input,.mach-editor-invalid .mach-select-trigger,.mach-editor-invalid input,.mach-editor-invalid select:not([hidden]){border-color:#ef4444!important;box-shadow:0 0 0 1px #ef444459}.mach-editor-validating{cursor:progress;opacity:.72}.mach-footer{display:flex;flex-shrink:0;width:100%;overflow:hidden;background:var(--mach-header-bg);border-top:1px solid var(--mach-border-color);font-weight:600;color:var(--mach-header-fg);position:relative;z-index:3}.mach-footer-row{position:relative;overflow:hidden;flex-shrink:0}.mach-footer-row--center{flex:1 1 auto;min-width:0}.mach-footer-cell{position:absolute;top:0;display:flex;align-items:center;padding:0 var(--mach-cell-padding);border-right:1px solid transparent;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;height:100%;font-variant-numeric:tabular-nums}.mach-root.mach-cell-borders .mach-footer-cell{border-right-color:var(--mach-border-color)}.mach-cell--range{background:color-mix(in srgb,var(--mach-primary) 7%,transparent)!important}.mach-cell--range:after{content:"";position:absolute;inset:0;z-index:2;border:0 solid var(--mach-primary);pointer-events:none}.mach-cell--range.mach-cell--range-top:after{border-top-width:1.5px}.mach-cell--range.mach-cell--range-bottom:after{border-bottom-width:1.5px}.mach-cell--range.mach-cell--range-left:after{border-left-width:1.5px}.mach-cell--range.mach-cell--range-right:after{border-right-width:1.5px}.mach-cell--range.mach-cell--focus{box-shadow:inset 0 0 0 var(--mach-focus-width) var(--mach-cell-focus-color)}.mach-cell--range.mach-cell--focus:after{display:none}.mach-context-menu{position:fixed;z-index:var(--mach-z-menu);display:flex;flex-direction:column;min-width:140px;padding:5px;background:var(--mach-body-bg);color:var(--mach-body-fg);border:1px solid var(--mach-border-color);border-radius:var(--mach-radius-lg);box-shadow:var(--mach-shadow);font-family:var(--mach-font-family);font-size:var(--mach-font-size)}.mach-context-menu-item{text-align:left;padding:6px 10px;border:none;border-radius:var(--mach-radius);background:transparent;color:inherit;font:inherit;cursor:pointer;white-space:nowrap}.mach-context-menu-item:hover{background:var(--mach-row-hover-bg);color:var(--mach-primary)}.mach-fill-handle{position:absolute;width:8px;height:8px;border-radius:2px;background:var(--mach-primary);border:1.5px solid var(--mach-body-bg);cursor:crosshair;z-index:6;box-shadow:0 0 0 1px #2563eb59}.mach-root--filling,.mach-root--filling *{user-select:none!important;cursor:crosshair!important}.mach-infinite-loading{position:absolute;left:50%;bottom:14px;transform:translate(-50%);display:flex;align-items:center;gap:8px;padding:5px 14px;border-radius:999px;background:var(--mach-body-bg);border:1px solid var(--mach-border-color);box-shadow:var(--mach-shadow-sm);color:var(--mach-header-fg);font-size:12px;z-index:var(--mach-z-loading)}.mach-infinite-loading .mach-spinner{width:14px;height:14px;border-width:2px}.mach-statusbar{display:flex;align-items:center;gap:18px;flex-shrink:0;height:28px;padding:0 12px;background:var(--mach-header-bg);border-top:1px solid var(--mach-border-color);color:var(--mach-header-fg);font-size:11px;overflow:hidden;white-space:nowrap;font-variant-numeric:tabular-nums}.mach-statusbar-item--rangeAggregate{margin-left:auto}.mach-pinned-rows{display:flex;width:100%;overflow:hidden;background:var(--mach-header-bg);flex-shrink:0;border-bottom:1px solid var(--mach-border-color)}.mach-pinned-rows--bottom{border-bottom:none;border-top:1px solid var(--mach-border-color)}.mach-pinned-viewport{flex:1 1 auto;min-width:0;overflow:hidden}.mach-pinned-seg{position:relative;overflow:hidden;flex-shrink:0}.mach-pinned-seg--center{position:relative}.mach-pinned-row{position:relative;width:100%;border-bottom:1px solid var(--mach-row-border-color)}.mach-pinned-row .mach-cell{position:absolute;top:0;background:var(--mach-header-bg);font-weight:600;color:var(--mach-header-fg)}.mach-pinned-row:last-child{border-bottom:none}.mach-cell--wrap{white-space:normal;word-break:break-word;line-height:1.45;align-items:flex-start;padding-top:5px;padding-bottom:5px}.mach-editor-input,.mach-editor-select-control .mach-select-trigger{width:100%;height:calc(var(--mach-row-h) - 8px);padding:0 6px;border:1px solid var(--mach-primary);border-radius:var(--mach-radius-sm);font-family:inherit;font-size:var(--mach-font-size);color:inherit;background:var(--mach-body-bg);outline:none}.mach-select-control{position:relative;display:inline-flex;min-width:0;font-family:var(--mach-font-family, inherit);font-size:var(--mach-font-size, 14px)}.mach-select-native[hidden]{display:none!important}.mach-select-trigger{display:flex;align-items:center;justify-content:space-between;gap:10px;min-width:0;height:34px;padding:0 10px;border:1px solid var(--mach-border-color, #e6eaf0);border-radius:var(--mach-radius, 6px);outline:none;color:var(--mach-body-fg, #1f2937);background:var(--mach-body-bg, #fff);font:inherit;line-height:1;text-align:left;cursor:pointer;transition:border-color var(--mach-transition, .15s ease),box-shadow var(--mach-transition, .15s ease),background-color var(--mach-transition, .15s ease)}.mach-select-trigger:hover{border-color:color-mix(in srgb,var(--mach-primary, #2563eb) 44%,var(--mach-border-color, #e6eaf0));background:color-mix(in srgb,var(--mach-primary, #2563eb) 3%,var(--mach-body-bg, #fff))}.mach-select-trigger:focus-visible,.mach-select-trigger[aria-expanded=true]{border-color:var(--mach-primary, #2563eb);box-shadow:0 0 0 3px color-mix(in srgb,var(--mach-primary, #2563eb) 12%,transparent)}.mach-select-value{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mach-select-caret{width:8px;height:8px;flex:0 0 auto;border-right:1.5px solid currentColor;border-bottom:1.5px solid currentColor;transform:translateY(-2px) rotate(45deg);transition:transform var(--mach-transition, .15s ease)}.mach-select-trigger[aria-expanded=true] .mach-select-caret{transform:translateY(2px) rotate(225deg)}.mach-select-listbox{position:fixed;z-index:var(--mach-z-menu, 1200);display:none;flex-direction:column;gap:2px;min-width:112px;max-width:min(320px,calc(100vw - 16px));max-height:min(244px,calc(100vh - 16px));padding:5px;overflow:auto;overscroll-behavior:contain;border:1px solid color-mix(in srgb,var(--mach-border-color, #e6eaf0) 88%,var(--mach-primary, #2563eb));border-radius:calc(var(--mach-radius-lg, 8px) + 1px);color:var(--mach-body-fg, #1f2937);background:var(--mach-body-bg, #fff);box-shadow:0 14px 36px color-mix(in srgb,var(--mach-body-fg, #1f2937) 18%,transparent),var(--mach-shadow-sm, 0 1px 3px rgba(15, 23, 42, .12));font-family:var(--mach-font-family, inherit);font-size:var(--mach-font-size, 14px);isolation:isolate}.mach-select-listbox--open{display:flex;animation:mach-select-listbox-in .12s ease-out}.mach-select-option{position:relative;display:flex;align-items:center;flex:0 0 auto;width:100%;min-height:32px;padding:0 30px 0 10px;border:0;border-radius:var(--mach-radius, 6px);outline:none;color:inherit;background:transparent;font:inherit;text-align:left;cursor:pointer;transition:color var(--mach-transition, .15s ease),background-color var(--mach-transition, .15s ease)}.mach-select-option:hover,.mach-select-option:focus-visible,.mach-select-option--active{color:var(--mach-primary, #2563eb);background:color-mix(in srgb,var(--mach-primary, #2563eb) 9%,var(--mach-body-bg, #fff))}.mach-select-option[aria-selected=true]{color:var(--mach-primary, #2563eb);background:color-mix(in srgb,var(--mach-primary, #2563eb) 13%,var(--mach-body-bg, #fff));font-weight:600}.mach-select-option[aria-selected=true]:after{content:"\2713";position:absolute;right:10px;font-size:12px;font-weight:700}.mach-select-option:disabled{opacity:.42;cursor:not-allowed}@keyframes mach-select-listbox-in{0%{transform:translateY(-3px) scale(.99)}to{transform:translateY(0) scale(1)}}.mach-select-listbox--above{transform-origin:bottom}.mach-filter-select-control{width:100%}.mach-filter-select-trigger{width:100%;background:color-mix(in srgb,var(--mach-header-bg) 62%,var(--mach-body-bg))}.mach-filter-listbox{width:auto}.mach-overlay{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:var(--mach-body-bg);z-index:var(--mach-z-overlay)}.mach-overlay-text{color:var(--mach-header-fg);font-size:var(--mach-font-size)}.mach-overlay-content{max-width:min(100%,320px)}.mach-loading{display:grid;justify-items:center;gap:14px;min-width:172px;padding:20px 24px}.mach-loading__visual{position:relative;display:grid;gap:8px;width:132px;padding:14px 16px;overflow:hidden;background:color-mix(in srgb,var(--mach-header-bg) 82%,var(--mach-body-bg));border:1px solid var(--mach-border-color);border-radius:var(--mach-radius-lg);box-shadow:var(--mach-shadow-sm)}.mach-loading__visual:before{content:"";position:absolute;inset:0;transform:translate(-100%);background:linear-gradient(100deg,transparent 20%,color-mix(in srgb,var(--mach-primary) 11%,transparent) 50%,transparent 80%);animation:mach-loading-sweep 1.35s ease-in-out infinite}.mach-loading__row{height:7px;border-radius:999px;background:color-mix(in srgb,var(--mach-primary) 13%,var(--mach-border-color))}.mach-loading__row:nth-child(2){width:82%}.mach-loading__row:nth-child(3){width:92%}.mach-loading__row:nth-child(4){width:66%}.mach-loading__status{display:inline-flex;align-items:center;gap:8px;color:var(--mach-header-fg);font-size:var(--mach-font-size-sm)}.mach-loading__spinner{width:14px;height:14px}.mach-loading__label{line-height:1}.mach-spinner{width:22px;height:22px;border:2px solid var(--mach-border-color);border-top-color:var(--mach-primary);border-radius:50%;animation:mach-spin .8s linear infinite}@keyframes mach-spin{to{transform:rotate(360deg)}}@keyframes mach-loading-sweep{to{transform:translate(100%)}}.mach-filter-panel{position:fixed;z-index:var(--mach-z-popup);display:flex;flex-direction:column;gap:10px;width:224px;max-width:calc(100vw - 16px);padding:12px;background:var(--mach-body-bg);color:var(--mach-body-fg);border:1px solid color-mix(in srgb,var(--mach-border-color) 88%,var(--mach-primary));border-radius:calc(var(--mach-radius-lg) + 2px);box-shadow:0 14px 36px color-mix(in srgb,var(--mach-body-fg) 16%,transparent),var(--mach-shadow-sm);font-family:var(--mach-font-family);font-size:var(--mach-font-size);animation:mach-filter-panel-in .14s ease-out}.mach-filter-body{display:flex;flex-direction:column;gap:8px}.mach-filter-input{width:100%;height:34px;padding:0 10px;border:1px solid var(--mach-border-color);border-radius:var(--mach-radius);font-family:inherit;font-size:var(--mach-font-size);color:inherit;background:var(--mach-body-bg);outline:none;transition:border-color var(--mach-transition),box-shadow var(--mach-transition)}.mach-filter-input:focus{border-color:var(--mach-primary);box-shadow:0 0 0 3px color-mix(in srgb,var(--mach-primary) 12%,transparent)}@keyframes mach-filter-panel-in{0%{opacity:0;transform:translateY(-3px) scale(.99)}}.mach-filter-set-list{max-height:220px;overflow:auto;display:flex;flex-direction:column;gap:1px;border:1px solid var(--mach-border-color);border-radius:var(--mach-radius);padding:4px}.mach-filter-set-item{display:flex;align-items:center;gap:6px;padding:3px 5px;border-radius:var(--mach-radius-sm);cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mach-filter-set-item:hover{background:var(--mach-row-hover-bg)}.mach-filter-set-item input{accent-color:var(--mach-primary);margin:0;width:13px;height:13px}.mach-filter-footer{display:flex;justify-content:flex-end;gap:6px}.mach-filter-footer button{padding:4px 12px;border-radius:var(--mach-radius);border:1px solid var(--mach-border-color);background:var(--mach-body-bg);color:inherit;font-family:inherit;font-size:var(--mach-font-size);cursor:pointer}.mach-filter-footer button:hover{border-color:var(--mach-primary);color:var(--mach-primary)}.mach-filter-btn-apply{background:var(--mach-primary)!important;border-color:var(--mach-primary)!important;color:#fff!important}.mach-filter-btn-apply:hover{opacity:.9;color:#fff!important}.mach-column-panel{min-width:220px;max-height:70vh;overflow:auto}.mach-column-panel[role=dialog]{width:min(440px,calc(100vw - 16px))}.mach-column-workbench-search{box-sizing:border-box;width:100%;height:30px;padding:0 9px;border:1px solid var(--mach-border-color);border-radius:var(--mach-radius);background:var(--mach-body-bg);color:var(--mach-body-fg);font:inherit;outline:none}.mach-column-workbench-search:focus{border-color:var(--mach-primary);box-shadow:0 0 0 2px var(--mach-primary-weak)}.mach-column-panel-title{font-weight:600;color:var(--mach-header-fg);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mach-column-panel-subtitle{font-size:11px;color:var(--mach-header-fg);margin-top:2px}.mach-column-panel-actions{display:flex;gap:6px;flex-wrap:wrap}.mach-column-panel-btn{flex:1;min-width:60px;padding:4px 8px;border-radius:var(--mach-radius);border:1px solid var(--mach-border-color);background:var(--mach-body-bg);color:inherit;font-family:inherit;font-size:12px;cursor:pointer;white-space:nowrap}.mach-column-panel-btn:hover{border-color:var(--mach-primary);color:var(--mach-primary)}.mach-column-panel-divider{height:1px;background:var(--mach-border-color);margin:4px 0}.mach-column-panel-list{max-height:280px;overflow:auto;display:flex;flex-direction:column;gap:1px;border:1px solid var(--mach-border-color);border-radius:var(--mach-radius);padding:4px}.mach-column-workbench-item{display:grid;grid-template-columns:minmax(120px,1fr) 108px 26px 26px;align-items:center;gap:4px;min-height:32px;padding:2px 3px;border-radius:var(--mach-radius)}.mach-column-workbench-item:hover{background:var(--mach-row-hover-bg)}.mach-column-workbench-label{display:flex;min-width:0;align-items:center;gap:7px;cursor:pointer}.mach-column-workbench-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mach-column-workbench-pin-control,.mach-column-workbench-move{height:26px;border:1px solid var(--mach-border-color);border-radius:var(--mach-radius);background:var(--mach-body-bg);color:inherit;font:inherit}.mach-column-workbench-pin-control{width:108px;border:0}.mach-column-workbench-pin-control .mach-select-trigger{width:100%;height:26px;padding:0 7px;border-radius:var(--mach-radius);font-size:12px;box-shadow:none}.mach-column-workbench-move{padding:0;cursor:pointer}.mach-column-workbench-move:disabled{cursor:not-allowed;opacity:.35}.mach-tag{display:inline-flex;align-items:center;gap:4px;padding:0 8px;height:20px;line-height:18px;border-radius:999px;font-size:var(--mach-font-size-sm);font-weight:500;white-space:nowrap}.mach-tag:before{content:"";width:5px;height:5px;border-radius:999px;background:currentColor}.mach-tag--success{color:var(--mach-success);background:color-mix(in srgb,var(--mach-success) 10%,transparent)}.mach-tag--warning{color:var(--mach-warning);background:color-mix(in srgb,var(--mach-warning) 12%,transparent)}.mach-tag--danger{color:var(--mach-danger);background:color-mix(in srgb,var(--mach-danger) 10%,transparent)}.mach-tag--info{color:var(--mach-info);background:color-mix(in srgb,var(--mach-info) 10%,transparent)}.mach-tag--neutral{color:var(--mach-header-fg);background:color-mix(in srgb,var(--mach-header-fg) 10%,transparent)}.mach-progress{display:flex;align-items:center;gap:6px;width:100%}.mach-progress__track{flex:1;min-width:0;height:6px;border-radius:999px;background:color-mix(in srgb,var(--mach-header-fg) 14%,transparent);overflow:hidden}.mach-progress__bar{height:100%;border-radius:999px;background:var(--mach-primary);transition:width var(--mach-transition)}.mach-progress__label{flex-shrink:0;font-size:var(--mach-font-size-sm);color:var(--mach-header-fg);font-variant-numeric:tabular-nums}.mach-link{color:var(--mach-primary);cursor:pointer}.mach-link:hover{text-decoration:underline}.mach-actions{display:inline-flex;align-items:center;gap:2px}.mach-sr-only{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}.mach-action-btn{display:inline-flex;align-items:center;justify-content:center;min-width:24px;height:24px;padding:0 4px;border:none;border-radius:var(--mach-radius-sm);background:transparent;color:var(--mach-header-fg);font-size:var(--mach-font-size-sm);line-height:1;cursor:pointer;white-space:nowrap;transition:color var(--mach-transition),background-color var(--mach-transition),transform var(--mach-transition)}.mach-action-btn:hover{background:var(--mach-row-hover-bg);color:var(--mach-primary)}.mach-action-btn--danger:hover{background:color-mix(in srgb,var(--mach-danger) 10%,transparent);color:var(--mach-danger);transform:scale(1.06)}.mach-action-btn--success:hover{background:color-mix(in srgb,var(--mach-success) 12%,transparent);color:var(--mach-success);transform:scale(1.06)}.mach-action-btn--primary{color:var(--mach-primary)}.mach-action-btn--warning{color:var(--mach-warning)}.mach-action-btn--success,.mach-edit-control--confirm{color:var(--mach-success)}.mach-action-btn--danger{color:var(--mach-danger)}.mach-action-btn:focus-visible,.mach-edit-control:focus-visible,.mach-cell-edit-trigger:focus-visible,.mach-action-drawer__close:focus-visible{outline:2px solid color-mix(in srgb,var(--mach-primary) 65%,transparent);outline-offset:1px}.mach-action-btn:disabled{cursor:not-allowed;opacity:.4}.mach-action-btn--loading svg{animation:mach-spin .8s linear infinite}.mach-dictionary-value--loading{color:var(--mach-header-fg);opacity:.72}.mach-dictionary-value--error{text-decoration:underline dotted;text-underline-offset:3px}.mach-action-btn--icon{padding:0;width:24px}.mach-context-menu-item--danger{color:var(--mach-danger)}.mach-context-menu-item,.mach-action-drawer__item{display:flex;align-items:center;gap:9px}.mach-context-menu-item--primary,.mach-action-drawer__item--primary{color:var(--mach-primary)}.mach-context-menu-item--warning,.mach-action-drawer__item--warning{color:var(--mach-warning)}.mach-context-menu-item--success,.mach-action-drawer__item--success{color:var(--mach-success)}.mach-context-menu-item--danger,.mach-action-drawer__item--danger{color:var(--mach-danger)}.mach-action-drawer-backdrop{position:fixed;inset:0;z-index:calc(var(--mach-z-menu) + 2);background:#0f172a33;backdrop-filter:blur(1px)}.mach-action-drawer{position:absolute;top:0;right:0;display:flex;flex-direction:column;width:min(340px,calc(100vw - 24px));height:100%;background:var(--mach-body-bg);color:var(--mach-body-fg);border-left:1px solid var(--mach-border-color);box-shadow:-16px 0 40px #0f172a24;font-family:var(--mach-font-family);animation:mach-drawer-in .18s ease-out}.mach-action-drawer__header{display:flex;align-items:center;justify-content:space-between;min-height:56px;padding:0 16px 0 20px;border-bottom:1px solid var(--mach-border-color)}.mach-action-drawer__close{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;padding:0;border:0;border-radius:var(--mach-radius);background:transparent;color:var(--mach-header-fg);cursor:pointer}.mach-action-drawer__close:hover{color:var(--mach-primary);background:var(--mach-row-hover-bg)}.mach-action-drawer__body{display:flex;flex-direction:column;gap:4px;padding:12px;overflow:auto}.mach-action-drawer__item{width:100%;min-height:40px;padding:0 12px;border:0;border-radius:var(--mach-radius);background:transparent;font:inherit;text-align:left;cursor:pointer}.mach-action-drawer__item:hover:not(:disabled){background:var(--mach-row-hover-bg)}.mach-action-drawer__item:disabled{opacity:.4;cursor:not-allowed}@keyframes mach-drawer-in{0%{transform:translate(18px);opacity:0}to{transform:translate(0);opacity:1}}@media(max-width:640px){.mach-action-drawer{top:auto;bottom:0;width:100%;height:auto;max-height:min(70vh,520px);border-top:1px solid var(--mach-border-color);border-left:0;border-radius:var(--mach-radius-lg) var(--mach-radius-lg) 0 0;animation-name:mach-drawer-up}}@keyframes mach-drawer-up{0%{transform:translateY(18px);opacity:0}to{transform:translateY(0);opacity:1}}.mach-cell:has(.mach-cell-edit-trigger){padding-right:29px}.mach-cell-edit-trigger{position:absolute;right:5px;top:50%;display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;padding:0;transform:translateY(-50%);border:0;border-radius:var(--mach-radius-sm);background:transparent;color:var(--mach-header-fg);cursor:pointer;opacity:0;transition:opacity var(--mach-transition),color var(--mach-transition),background-color var(--mach-transition)}.mach-cell-edit-trigger svg{width:13px;height:13px}.mach-cell:hover .mach-cell-edit-trigger--hover,.mach-cell:focus-within .mach-cell-edit-trigger--hover,.mach-cell-edit-trigger--always{opacity:.72}.mach-cell-edit-trigger:hover{opacity:1;color:var(--mach-primary);background:color-mix(in srgb,var(--mach-primary) 9%,transparent)}.mach-cell--editing{overflow:visible;z-index:4}.mach-cell-editor-shell,.mach-row-editor-shell{display:flex;align-items:center;width:100%;min-width:0;gap:5px}.mach-cell-editor-shell>.mach-editor-input,.mach-cell-editor-shell>.mach-editor-select-control,.mach-cell-editor-shell>:not(.mach-cell-editor-controls),.mach-row-editor-shell>*{flex:1 1 auto;min-width:0}.mach-cell-editor-controls{display:inline-flex;flex:0 0 auto;align-items:center;gap:2px;padding:2px;border:1px solid var(--mach-border-color);border-radius:var(--mach-radius);background:var(--mach-body-bg);box-shadow:var(--mach-shadow-sm)}.mach-edit-control{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;padding:0;border:0;border-radius:var(--mach-radius-sm);background:transparent;color:var(--mach-header-fg);cursor:pointer;transition:color var(--mach-transition),background-color var(--mach-transition),transform var(--mach-transition)}.mach-edit-control svg{width:14px;height:14px}.mach-edit-control--confirm{color:var(--mach-success)}.mach-edit-control--confirm:hover{background:color-mix(in srgb,var(--mach-success) 12%,transparent);transform:scale(1.06)}.mach-edit-control--cancel{color:var(--mach-danger)}.mach-edit-control--cancel:hover{background:color-mix(in srgb,var(--mach-danger) 10%,transparent);transform:scale(1.06)}.mach-edit-control:disabled{opacity:.35;cursor:wait}.mach-row--editing,.mach-row--editing .mach-cell{background:color-mix(in srgb,var(--mach-primary) 3%,var(--mach-body-bg))}.mach-cell--row-editing .mach-editor-input,.mach-cell--row-editing .mach-editor-select-control .mach-select-trigger{border-color:color-mix(in srgb,var(--mach-primary) 45%,var(--mach-border-color));box-shadow:0 1px 2px #0f172a0a}.mach-cell--row-editing .mach-editor-input:focus,.mach-cell--row-editing .mach-editor-select-control .mach-select-trigger:focus-visible,.mach-cell--row-editing .mach-editor-select-control .mach-select-trigger[aria-expanded=true]{border-color:var(--mach-primary);box-shadow:0 0 0 2px color-mix(in srgb,var(--mach-primary) 12%,transparent)}.mach-tooltip{position:fixed;z-index:var(--mach-z-menu);max-width:320px;padding:6px 10px;border-radius:var(--mach-radius);background:var(--mach-body-fg);color:var(--mach-body-bg);font-size:var(--mach-font-size-sm);line-height:1.5;box-shadow:var(--mach-shadow);pointer-events:none;word-break:break-word}.mach-cell--flash{animation:mach-flash .8s ease-out}@keyframes mach-flash{0%{background-color:color-mix(in srgb,var(--mach-primary) 35%,transparent)}to{background-color:transparent}}.mach-context-menu-separator{height:1px;margin:4px 6px;background:var(--mach-border-color)}.mach-context-menu-item:disabled{opacity:.45;cursor:not-allowed}.mach-pagination{display:flex;align-items:center;justify-content:flex-end;gap:6px;flex-shrink:0;height:40px;padding:0 12px;background:var(--mach-body-bg);border-top:var(--mach-border-width) solid var(--mach-border-color);color:var(--mach-body-fg);font-size:var(--mach-font-size-sm);user-select:none}.mach-pagination-total{color:var(--mach-header-fg);margin-right:8px;font-variant-numeric:tabular-nums}.mach-pagination-page{min-width:72px;text-align:center;color:var(--mach-body-fg);font-variant-numeric:tabular-nums}.mach-pagination-btn{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;border:var(--mach-border-width) solid var(--mach-border-color);border-radius:var(--mach-radius-sm);background:var(--mach-body-bg);color:var(--mach-header-fg);font-size:13px;line-height:1;cursor:pointer;transition:border-color var(--mach-transition),color var(--mach-transition),background-color var(--mach-transition)}.mach-pagination-btn:hover:not(:disabled){border-color:var(--mach-primary);color:var(--mach-primary)}.mach-pagination-btn:disabled{opacity:.35;cursor:not-allowed}.mach-pagination-size-control{height:24px;margin-left:6px;width:92px;font-size:var(--mach-font-size-sm)}.mach-pagination-size-control .mach-select-trigger{width:100%;height:24px;padding:0 6px;border-width:var(--mach-border-width);border-radius:var(--mach-radius-sm);color:var(--mach-header-fg);box-shadow:none}.mach-watermark{position:absolute;inset:0;z-index:6;pointer-events:none;background-repeat:repeat}.mach-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;padding:32px 16px;min-height:160px}.mach-empty__icon{margin-bottom:6px}.mach-empty__title{font-size:var(--mach-font-size);color:var(--mach-body-fg);font-weight:500}.mach-empty__hint{font-size:var(--mach-font-size-sm);color:var(--mach-header-fg)}@media(prefers-reduced-motion:reduce){.mach-spinner,.mach-loading__visual:before{animation-duration:2.4s}}.mach-cell--center{justify-content:center}.mach-cell--right{justify-content:flex-end}.mach-header-cell--center .mach-header-label{text-align:center}.mach-header-cell--right .mach-header-label{text-align:right}@media(prefers-reduced-motion:reduce){.mach-root *,.mach-root *:before,.mach-root *:after{scroll-behavior:auto!important;animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}.mach-action-drawer{animation:none!important}}.mach-root{--mach-row-warning-bg: color-mix(in srgb, var(--mach-warning) 11%, var(--mach-body-bg));--mach-row-danger-bg: color-mix(in srgb, var(--mach-danger) 9%, var(--mach-body-bg));--mach-row-success-bg: color-mix(in srgb, var(--mach-success) 10%, var(--mach-body-bg));--mach-row-info-bg: color-mix(in srgb, var(--mach-info) 10%, var(--mach-body-bg))}.mach-row--styled[data-row-tone=warning]{--mach-row-rule-bg: var(--mach-row-warning-bg)}.mach-row--styled[data-row-tone=danger]{--mach-row-rule-bg: var(--mach-row-danger-bg)}.mach-row--styled[data-row-tone=success]{--mach-row-rule-bg: var(--mach-row-success-bg)}.mach-row--styled[data-row-tone=info]{--mach-row-rule-bg: var(--mach-row-info-bg)}.mach-root :is(.mach-row,.mach-pinned-row).mach-row--styled,.mach-root :is(.mach-row,.mach-pinned-row).mach-row--styled .mach-cell{background-color:var(--mach-row-rule-bg, var(--mach-body-bg));color:var(--mach-row-rule-fg, var(--mach-body-fg))}.mach-root .mach-row--styled.mach-row--hover,.mach-root .mach-row--styled.mach-row--hover .mach-cell{background-color:color-mix(in srgb,var(--mach-primary) 4%,var(--mach-row-rule-bg, var(--mach-body-bg)))}.mach-root .mach-row--styled.mach-row--selected,.mach-root .mach-row--styled.mach-row--selected .mach-cell{background-color:color-mix(in srgb,var(--mach-primary) 12%,var(--mach-row-rule-bg, var(--mach-body-bg)))}
@@ -192,7 +192,12 @@ interface RowDragEndEvent<TData = any> extends GridEventBase<TData> {
192
192
  type: "rowDragEnd";
193
193
  rowNode: RowNode<TData>;
194
194
  fromIndex: number;
195
+ /** Legacy insertion boundary, before removing the source row. */
195
196
  toIndex: number;
197
+ /** Final displayed index after removing and inserting the source row. */
198
+ targetIndex: number;
199
+ /** True when the grid applied the move before emitting this event. */
200
+ applied: boolean;
196
201
  }
197
202
  interface PaginationChangedEvent<TData = any> extends GridEventBase<TData> {
198
203
  type: "paginationChanged";
@@ -812,6 +817,8 @@ interface ColumnState {
812
817
  flex?: number | null;
813
818
  /** Distinguishes responsive/definition width from an explicit user or API override. */
814
819
  widthMode?: "auto" | "manual";
820
+ /** Measured content basis for responsive fit sizing; independent of the rendered width. */
821
+ contentWidth?: number;
815
822
  pinned?: "left" | "right" | null;
816
823
  }
817
824
 
@@ -831,6 +838,7 @@ declare class Column<TData = any> {
831
838
  hide: boolean;
832
839
  pinned: PinnedDirection | null;
833
840
  manualWidth: number | null;
841
+ contentWidth: number | null;
834
842
  flex: number | null;
835
843
  currentWidth: number;
836
844
  parentGroup: ColumnGroup<TData> | null;
@@ -905,6 +913,10 @@ declare const DEFAULT_LOCALE: {
905
913
  readonly actionSave: "保存";
906
914
  readonly actionCancel: "取消";
907
915
  readonly actionMore: "更多操作";
916
+ readonly rowDragHandle: "拖动调整顺序;Alt + 上下方向键移动";
917
+ readonly rowDragUnavailable: "当前排序或数据模式不支持自动调整顺序";
918
+ readonly rowDragPosition: "第 {a} 行 → 第 {b} 行";
919
+ readonly rowDragOutside: "移回表格内放置 · Esc 取消";
908
920
  };
909
921
  type MachTableLocaleKey = keyof typeof DEFAULT_LOCALE;
910
922
  type MachTableLocale = Partial<Record<MachTableLocaleKey, string>>;
@@ -1038,6 +1050,21 @@ type DomLayoutMode = "normal" | "autoHeight";
1038
1050
  type ThemeMode = "light" | "dark" | "auto";
1039
1051
  type GridEditType = "cell" | "fullRow";
1040
1052
  type EditableIndicator = "hover" | "always" | "none";
1053
+ interface RowStyleParams<TData = any> {
1054
+ data: TData;
1055
+ node: RowNode<TData>;
1056
+ api: GridApi<TData>;
1057
+ rowPinned: "top" | "bottom" | null;
1058
+ }
1059
+ type RowTone = "warning" | "danger" | "success" | "info";
1060
+ /** First matching rule wins. Unmatched, group, detail and loading rows keep their default appearance. */
1061
+ interface RowStyleRule<TData = any> {
1062
+ when: (params: RowStyleParams<TData>) => boolean;
1063
+ /** Theme-aware subtle background; custom colors take precedence. */
1064
+ tone?: RowTone;
1065
+ backgroundColor?: string;
1066
+ color?: string;
1067
+ }
1041
1068
  interface RowEditValidationParams<TData = any> {
1042
1069
  data: TData;
1043
1070
  node: RowNode<TData>;
@@ -1115,6 +1142,7 @@ interface GridOptions<TData = any> extends EventHandlers<TData> {
1115
1142
  multiSort?: boolean;
1116
1143
  size?: GridSize;
1117
1144
  stripedRows?: boolean;
1145
+ rowStyleRules?: readonly RowStyleRule<TData>[];
1118
1146
  showCellBorders?: boolean;
1119
1147
  theme?: ThemeMode;
1120
1148
  quickFilterText?: string | null;
@@ -1160,6 +1188,7 @@ interface GridOptions<TData = any> extends EventHandlers<TData> {
1160
1188
  autoCheckedChildren?: boolean;
1161
1189
  defaultExpandAll?: boolean;
1162
1190
  indexOffset?: number;
1191
+ /** Apply flat local row moves automatically (default true). False emits intent for server-controlled ordering. */
1163
1192
  applyRowDrag?: boolean;
1164
1193
  undoStackSize?: number;
1165
1194
  /** Milliseconds used to coalesce applyTransactionAsync calls. */
@@ -1240,6 +1269,7 @@ interface ResolvedGridOptions<TData = any> extends EventHandlers<TData> {
1240
1269
  multiSort: boolean;
1241
1270
  size: GridSize;
1242
1271
  stripedRows: boolean;
1272
+ rowStyleRules: readonly RowStyleRule<TData>[];
1243
1273
  showCellBorders: boolean;
1244
1274
  theme: ThemeMode;
1245
1275
  quickFilterText: string | null;
@@ -1332,4 +1362,4 @@ interface ResolvedGridOptions<TData = any> extends EventHandlers<TData> {
1332
1362
  className: string;
1333
1363
  }
1334
1364
 
1335
- export { type DateFilterMatch as $, type AdvancedFilterModel as A, type CellClickEvent as B, type ColDef as C, type CellContextMenuEvent as D, type CellDoubleClickEvent as E, type FilterModel as F, type GridOptions as G, type CellEditingStartedEvent as H, type CellEditingStoppedEvent as I, type CellEditorFactory as J, type CellEditorParams as K, type CellRendererOutput as L, type CellStyleRule as M, type CellValueChangedEvent as N, type ColDefOrGroup as O, type ColumnLayoutMode as P, type ColumnMovedEvent as Q, type ColumnResizedEvent as R, type SortModel as S, type ColumnVisibilityChangedEvent as T, type ColumnWorkbenchItem as U, type ContextMenuItem as V, type ContextMenuParams as W, type CsvExportParams as X, DEFAULT_LOCALE as Y, type DatasourceMode as Z, type DateFilterCondition as _, type GridComponents as a, type RangeSelectionChangedEvent as a$, type DetailRowRendererParams as a0, type DetailToggledEvent as a1, type DirtyStateChangedEvent as a2, type DomLayoutMode as a3, EVENT_TYPES as a4, type EditableIndicator as a5, type EditableParams as a6, type EventHandlers as a7, type FilterChangedEvent as a8, type FilterType as a9, type GridPerformanceSnapshot as aA, type GridPersistenceOptions as aB, type GridReadyEvent as aC, type GridRowsApi as aD, type GridSelectionApi as aE, type GridSortingApi as aF, type GridStateApi as aG, type GridStateSection as aH, type GridUpdateSchedulerSnapshot as aI, type GridViewApi as aJ, type HeaderComponentParams as aK, type ICellEditor as aL, type ICellRendererResult as aM, type ImportCsvOptions as aN, type InfiniteGetRowsParams as aO, LOCALE_EN as aP, type MachTableLocale as aQ, type MachTableLocaleKey as aR, type ModelUpdatedEvent as aS, type NumberFilterCondition as aT, type NumberFilterMatch as aU, type OverlayContent as aV, type OverlayTemplate as aW, type PaginationChangedEvent as aX, type PaginationConfig as aY, type PinnedDirection as aZ, type PrintOptions as a_, type GetRowHeightParams as aa, type GridAsyncOptions as ab, type GridBatchSaveResult as ac, type GridCellChange as ad, type GridCellRange as ae, type GridColumnsApi as af, type GridDataProcessor as ag, type GridDataProcessorColumn as ah, type GridDataProcessorRequest as ai, type GridDataProcessorResult as aj, type GridDataProcessorRow as ak, type GridDatasource as al, type GridDiagnosticError as am, type GridDiagnostics as an, type GridDiagnosticsApi as ao, type GridEditType as ap, type GridEditingApi as aq, type GridErrorCode as ar, type GridErrorEvent as as, type GridEventBase as at, type GridEventMap as au, type GridFeatureContext as av, type GridFilteringApi as aw, type GridHierarchyApi as ax, type GridIoApi as ay, type GridPaginationApi as az, type GridEventType as b, type RefreshCellsParams as b0, type RemoteBlockCacheSnapshot as b1, type ResolvedGridOptions as b2, type RowClickEvent as b3, type RowDragEndEvent as b4, type RowEditChange as b5, type RowEditValidationParams as b6, type RowEditValidationResult as b7, type RowEditingStartedEvent as b8, type RowEditingStoppedEvent as b9, type WatermarkConfig as bA, formatText as bB, formatTwo as bC, isColDefGroup as bD, matchLocaleKey as bE, type RowNode as ba, type RowSelectionMode as bb, type RowTransaction as bc, type SaveChangeIssue as bd, type SaveChangesHandler as be, type SaveChangesResult as bf, type SelectEditorOption as bg, type SelectEditorParams as bh, type SelectionChangedEvent as bi, type SetFilterCondition as bj, type SetFilterParams as bk, type SortChangedEvent as bl, type SortDirection as bm, type SortModelItem as bn, type StatusBarConfig as bo, type StatusBarPanel as bp, type TextFilterCondition as bq, type TextFilterMatch as br, type ThemeMode as bs, type TooltipParams as bt, type TreeChildrenLoadFailedEvent as bu, type TreeChildrenLoadedEvent as bv, type TreeDataLoadParams as bw, type ValueFormatterParams as bx, type ValueGetterParams as by, type ValueSetterParams as bz, type GridApi as c, type ColumnFilter as d, type AdvancedFilterCondition as e, type AdvancedFilterNode as f, type AdvancedFilterGroup as g, type GridFeature as h, type ColDefGroup as i, type GridStateStore as j, type GridState as k, type GridStateInput as l, type GridSize as m, type CellRendererParams as n, type GridChange as o, type CellRendererFn as p, type FieldPath as q, type FieldPathValue as r, type SaveChangeConflict as s, type ColumnState as t, type ActionPolicy as u, type ActionPolicyContext as v, type ApplyGridStateOptions as w, type CellAlign as x, type CellClassParams as y, type CellClassRule as z };
1365
+ export { type DateFilterMatch as $, type AdvancedFilterModel as A, type CellClickEvent as B, type ColDef as C, type CellContextMenuEvent as D, type CellDoubleClickEvent as E, type FilterModel as F, type GridOptions as G, type CellEditingStartedEvent as H, type CellEditingStoppedEvent as I, type CellEditorFactory as J, type CellEditorParams as K, type CellRendererOutput as L, type CellStyleRule as M, type CellValueChangedEvent as N, type ColDefOrGroup as O, type ColumnLayoutMode as P, type ColumnMovedEvent as Q, type ColumnResizedEvent as R, type SortModel as S, type ColumnVisibilityChangedEvent as T, type ColumnWorkbenchItem as U, type ContextMenuItem as V, type ContextMenuParams as W, type CsvExportParams as X, DEFAULT_LOCALE as Y, type DatasourceMode as Z, type DateFilterCondition as _, type GridComponents as a, type RangeSelectionChangedEvent as a$, type DetailRowRendererParams as a0, type DetailToggledEvent as a1, type DirtyStateChangedEvent as a2, type DomLayoutMode as a3, EVENT_TYPES as a4, type EditableIndicator as a5, type EditableParams as a6, type EventHandlers as a7, type FilterChangedEvent as a8, type FilterType as a9, type GridPerformanceSnapshot as aA, type GridPersistenceOptions as aB, type GridReadyEvent as aC, type GridRowsApi as aD, type GridSelectionApi as aE, type GridSortingApi as aF, type GridStateApi as aG, type GridStateSection as aH, type GridUpdateSchedulerSnapshot as aI, type GridViewApi as aJ, type HeaderComponentParams as aK, type ICellEditor as aL, type ICellRendererResult as aM, type ImportCsvOptions as aN, type InfiniteGetRowsParams as aO, LOCALE_EN as aP, type MachTableLocale as aQ, type MachTableLocaleKey as aR, type ModelUpdatedEvent as aS, type NumberFilterCondition as aT, type NumberFilterMatch as aU, type OverlayContent as aV, type OverlayTemplate as aW, type PaginationChangedEvent as aX, type PaginationConfig as aY, type PinnedDirection as aZ, type PrintOptions as a_, type GetRowHeightParams as aa, type GridAsyncOptions as ab, type GridBatchSaveResult as ac, type GridCellChange as ad, type GridCellRange as ae, type GridColumnsApi as af, type GridDataProcessor as ag, type GridDataProcessorColumn as ah, type GridDataProcessorRequest as ai, type GridDataProcessorResult as aj, type GridDataProcessorRow as ak, type GridDatasource as al, type GridDiagnosticError as am, type GridDiagnostics as an, type GridDiagnosticsApi as ao, type GridEditType as ap, type GridEditingApi as aq, type GridErrorCode as ar, type GridErrorEvent as as, type GridEventBase as at, type GridEventMap as au, type GridFeatureContext as av, type GridFilteringApi as aw, type GridHierarchyApi as ax, type GridIoApi as ay, type GridPaginationApi as az, type GridEventType as b, type RefreshCellsParams as b0, type RemoteBlockCacheSnapshot as b1, type ResolvedGridOptions as b2, type RowClickEvent as b3, type RowDragEndEvent as b4, type RowEditChange as b5, type RowEditValidationParams as b6, type RowEditValidationResult as b7, type RowEditingStartedEvent as b8, type RowEditingStoppedEvent as b9, type ValueFormatterParams as bA, type ValueGetterParams as bB, type ValueSetterParams as bC, type WatermarkConfig as bD, formatText as bE, formatTwo as bF, isColDefGroup as bG, matchLocaleKey as bH, type RowNode as ba, type RowSelectionMode as bb, type RowStyleParams as bc, type RowStyleRule as bd, type RowTone as be, type RowTransaction as bf, type SaveChangeIssue as bg, type SaveChangesHandler as bh, type SaveChangesResult as bi, type SelectEditorOption as bj, type SelectEditorParams as bk, type SelectionChangedEvent as bl, type SetFilterCondition as bm, type SetFilterParams as bn, type SortChangedEvent as bo, type SortDirection as bp, type SortModelItem as bq, type StatusBarConfig as br, type StatusBarPanel as bs, type TextFilterCondition as bt, type TextFilterMatch as bu, type ThemeMode as bv, type TooltipParams as bw, type TreeChildrenLoadFailedEvent as bx, type TreeChildrenLoadedEvent as by, type TreeDataLoadParams as bz, type GridApi as c, type ColumnFilter as d, type AdvancedFilterCondition as e, type AdvancedFilterNode as f, type AdvancedFilterGroup as g, type GridFeature as h, type ColDefGroup as i, type GridStateStore as j, type GridState as k, type GridStateInput as l, type GridSize as m, type CellRendererParams as n, type GridChange as o, type CellRendererFn as p, type FieldPath as q, type FieldPathValue as r, type SaveChangeConflict as s, type ColumnState as t, type ActionPolicy as u, type ActionPolicyContext as v, type ApplyGridStateOptions as w, type CellAlign as x, type CellClassParams as y, type CellClassRule as z };
@@ -192,7 +192,12 @@ interface RowDragEndEvent<TData = any> extends GridEventBase<TData> {
192
192
  type: "rowDragEnd";
193
193
  rowNode: RowNode<TData>;
194
194
  fromIndex: number;
195
+ /** Legacy insertion boundary, before removing the source row. */
195
196
  toIndex: number;
197
+ /** Final displayed index after removing and inserting the source row. */
198
+ targetIndex: number;
199
+ /** True when the grid applied the move before emitting this event. */
200
+ applied: boolean;
196
201
  }
197
202
  interface PaginationChangedEvent<TData = any> extends GridEventBase<TData> {
198
203
  type: "paginationChanged";
@@ -812,6 +817,8 @@ interface ColumnState {
812
817
  flex?: number | null;
813
818
  /** Distinguishes responsive/definition width from an explicit user or API override. */
814
819
  widthMode?: "auto" | "manual";
820
+ /** Measured content basis for responsive fit sizing; independent of the rendered width. */
821
+ contentWidth?: number;
815
822
  pinned?: "left" | "right" | null;
816
823
  }
817
824
 
@@ -831,6 +838,7 @@ declare class Column<TData = any> {
831
838
  hide: boolean;
832
839
  pinned: PinnedDirection | null;
833
840
  manualWidth: number | null;
841
+ contentWidth: number | null;
834
842
  flex: number | null;
835
843
  currentWidth: number;
836
844
  parentGroup: ColumnGroup<TData> | null;
@@ -905,6 +913,10 @@ declare const DEFAULT_LOCALE: {
905
913
  readonly actionSave: "保存";
906
914
  readonly actionCancel: "取消";
907
915
  readonly actionMore: "更多操作";
916
+ readonly rowDragHandle: "拖动调整顺序;Alt + 上下方向键移动";
917
+ readonly rowDragUnavailable: "当前排序或数据模式不支持自动调整顺序";
918
+ readonly rowDragPosition: "第 {a} 行 → 第 {b} 行";
919
+ readonly rowDragOutside: "移回表格内放置 · Esc 取消";
908
920
  };
909
921
  type MachTableLocaleKey = keyof typeof DEFAULT_LOCALE;
910
922
  type MachTableLocale = Partial<Record<MachTableLocaleKey, string>>;
@@ -1038,6 +1050,21 @@ type DomLayoutMode = "normal" | "autoHeight";
1038
1050
  type ThemeMode = "light" | "dark" | "auto";
1039
1051
  type GridEditType = "cell" | "fullRow";
1040
1052
  type EditableIndicator = "hover" | "always" | "none";
1053
+ interface RowStyleParams<TData = any> {
1054
+ data: TData;
1055
+ node: RowNode<TData>;
1056
+ api: GridApi<TData>;
1057
+ rowPinned: "top" | "bottom" | null;
1058
+ }
1059
+ type RowTone = "warning" | "danger" | "success" | "info";
1060
+ /** First matching rule wins. Unmatched, group, detail and loading rows keep their default appearance. */
1061
+ interface RowStyleRule<TData = any> {
1062
+ when: (params: RowStyleParams<TData>) => boolean;
1063
+ /** Theme-aware subtle background; custom colors take precedence. */
1064
+ tone?: RowTone;
1065
+ backgroundColor?: string;
1066
+ color?: string;
1067
+ }
1041
1068
  interface RowEditValidationParams<TData = any> {
1042
1069
  data: TData;
1043
1070
  node: RowNode<TData>;
@@ -1115,6 +1142,7 @@ interface GridOptions<TData = any> extends EventHandlers<TData> {
1115
1142
  multiSort?: boolean;
1116
1143
  size?: GridSize;
1117
1144
  stripedRows?: boolean;
1145
+ rowStyleRules?: readonly RowStyleRule<TData>[];
1118
1146
  showCellBorders?: boolean;
1119
1147
  theme?: ThemeMode;
1120
1148
  quickFilterText?: string | null;
@@ -1160,6 +1188,7 @@ interface GridOptions<TData = any> extends EventHandlers<TData> {
1160
1188
  autoCheckedChildren?: boolean;
1161
1189
  defaultExpandAll?: boolean;
1162
1190
  indexOffset?: number;
1191
+ /** Apply flat local row moves automatically (default true). False emits intent for server-controlled ordering. */
1163
1192
  applyRowDrag?: boolean;
1164
1193
  undoStackSize?: number;
1165
1194
  /** Milliseconds used to coalesce applyTransactionAsync calls. */
@@ -1240,6 +1269,7 @@ interface ResolvedGridOptions<TData = any> extends EventHandlers<TData> {
1240
1269
  multiSort: boolean;
1241
1270
  size: GridSize;
1242
1271
  stripedRows: boolean;
1272
+ rowStyleRules: readonly RowStyleRule<TData>[];
1243
1273
  showCellBorders: boolean;
1244
1274
  theme: ThemeMode;
1245
1275
  quickFilterText: string | null;
@@ -1332,4 +1362,4 @@ interface ResolvedGridOptions<TData = any> extends EventHandlers<TData> {
1332
1362
  className: string;
1333
1363
  }
1334
1364
 
1335
- export { type DateFilterMatch as $, type AdvancedFilterModel as A, type CellClickEvent as B, type ColDef as C, type CellContextMenuEvent as D, type CellDoubleClickEvent as E, type FilterModel as F, type GridOptions as G, type CellEditingStartedEvent as H, type CellEditingStoppedEvent as I, type CellEditorFactory as J, type CellEditorParams as K, type CellRendererOutput as L, type CellStyleRule as M, type CellValueChangedEvent as N, type ColDefOrGroup as O, type ColumnLayoutMode as P, type ColumnMovedEvent as Q, type ColumnResizedEvent as R, type SortModel as S, type ColumnVisibilityChangedEvent as T, type ColumnWorkbenchItem as U, type ContextMenuItem as V, type ContextMenuParams as W, type CsvExportParams as X, DEFAULT_LOCALE as Y, type DatasourceMode as Z, type DateFilterCondition as _, type GridComponents as a, type RangeSelectionChangedEvent as a$, type DetailRowRendererParams as a0, type DetailToggledEvent as a1, type DirtyStateChangedEvent as a2, type DomLayoutMode as a3, EVENT_TYPES as a4, type EditableIndicator as a5, type EditableParams as a6, type EventHandlers as a7, type FilterChangedEvent as a8, type FilterType as a9, type GridPerformanceSnapshot as aA, type GridPersistenceOptions as aB, type GridReadyEvent as aC, type GridRowsApi as aD, type GridSelectionApi as aE, type GridSortingApi as aF, type GridStateApi as aG, type GridStateSection as aH, type GridUpdateSchedulerSnapshot as aI, type GridViewApi as aJ, type HeaderComponentParams as aK, type ICellEditor as aL, type ICellRendererResult as aM, type ImportCsvOptions as aN, type InfiniteGetRowsParams as aO, LOCALE_EN as aP, type MachTableLocale as aQ, type MachTableLocaleKey as aR, type ModelUpdatedEvent as aS, type NumberFilterCondition as aT, type NumberFilterMatch as aU, type OverlayContent as aV, type OverlayTemplate as aW, type PaginationChangedEvent as aX, type PaginationConfig as aY, type PinnedDirection as aZ, type PrintOptions as a_, type GetRowHeightParams as aa, type GridAsyncOptions as ab, type GridBatchSaveResult as ac, type GridCellChange as ad, type GridCellRange as ae, type GridColumnsApi as af, type GridDataProcessor as ag, type GridDataProcessorColumn as ah, type GridDataProcessorRequest as ai, type GridDataProcessorResult as aj, type GridDataProcessorRow as ak, type GridDatasource as al, type GridDiagnosticError as am, type GridDiagnostics as an, type GridDiagnosticsApi as ao, type GridEditType as ap, type GridEditingApi as aq, type GridErrorCode as ar, type GridErrorEvent as as, type GridEventBase as at, type GridEventMap as au, type GridFeatureContext as av, type GridFilteringApi as aw, type GridHierarchyApi as ax, type GridIoApi as ay, type GridPaginationApi as az, type GridEventType as b, type RefreshCellsParams as b0, type RemoteBlockCacheSnapshot as b1, type ResolvedGridOptions as b2, type RowClickEvent as b3, type RowDragEndEvent as b4, type RowEditChange as b5, type RowEditValidationParams as b6, type RowEditValidationResult as b7, type RowEditingStartedEvent as b8, type RowEditingStoppedEvent as b9, type WatermarkConfig as bA, formatText as bB, formatTwo as bC, isColDefGroup as bD, matchLocaleKey as bE, type RowNode as ba, type RowSelectionMode as bb, type RowTransaction as bc, type SaveChangeIssue as bd, type SaveChangesHandler as be, type SaveChangesResult as bf, type SelectEditorOption as bg, type SelectEditorParams as bh, type SelectionChangedEvent as bi, type SetFilterCondition as bj, type SetFilterParams as bk, type SortChangedEvent as bl, type SortDirection as bm, type SortModelItem as bn, type StatusBarConfig as bo, type StatusBarPanel as bp, type TextFilterCondition as bq, type TextFilterMatch as br, type ThemeMode as bs, type TooltipParams as bt, type TreeChildrenLoadFailedEvent as bu, type TreeChildrenLoadedEvent as bv, type TreeDataLoadParams as bw, type ValueFormatterParams as bx, type ValueGetterParams as by, type ValueSetterParams as bz, type GridApi as c, type ColumnFilter as d, type AdvancedFilterCondition as e, type AdvancedFilterNode as f, type AdvancedFilterGroup as g, type GridFeature as h, type ColDefGroup as i, type GridStateStore as j, type GridState as k, type GridStateInput as l, type GridSize as m, type CellRendererParams as n, type GridChange as o, type CellRendererFn as p, type FieldPath as q, type FieldPathValue as r, type SaveChangeConflict as s, type ColumnState as t, type ActionPolicy as u, type ActionPolicyContext as v, type ApplyGridStateOptions as w, type CellAlign as x, type CellClassParams as y, type CellClassRule as z };
1365
+ export { type DateFilterMatch as $, type AdvancedFilterModel as A, type CellClickEvent as B, type ColDef as C, type CellContextMenuEvent as D, type CellDoubleClickEvent as E, type FilterModel as F, type GridOptions as G, type CellEditingStartedEvent as H, type CellEditingStoppedEvent as I, type CellEditorFactory as J, type CellEditorParams as K, type CellRendererOutput as L, type CellStyleRule as M, type CellValueChangedEvent as N, type ColDefOrGroup as O, type ColumnLayoutMode as P, type ColumnMovedEvent as Q, type ColumnResizedEvent as R, type SortModel as S, type ColumnVisibilityChangedEvent as T, type ColumnWorkbenchItem as U, type ContextMenuItem as V, type ContextMenuParams as W, type CsvExportParams as X, DEFAULT_LOCALE as Y, type DatasourceMode as Z, type DateFilterCondition as _, type GridComponents as a, type RangeSelectionChangedEvent as a$, type DetailRowRendererParams as a0, type DetailToggledEvent as a1, type DirtyStateChangedEvent as a2, type DomLayoutMode as a3, EVENT_TYPES as a4, type EditableIndicator as a5, type EditableParams as a6, type EventHandlers as a7, type FilterChangedEvent as a8, type FilterType as a9, type GridPerformanceSnapshot as aA, type GridPersistenceOptions as aB, type GridReadyEvent as aC, type GridRowsApi as aD, type GridSelectionApi as aE, type GridSortingApi as aF, type GridStateApi as aG, type GridStateSection as aH, type GridUpdateSchedulerSnapshot as aI, type GridViewApi as aJ, type HeaderComponentParams as aK, type ICellEditor as aL, type ICellRendererResult as aM, type ImportCsvOptions as aN, type InfiniteGetRowsParams as aO, LOCALE_EN as aP, type MachTableLocale as aQ, type MachTableLocaleKey as aR, type ModelUpdatedEvent as aS, type NumberFilterCondition as aT, type NumberFilterMatch as aU, type OverlayContent as aV, type OverlayTemplate as aW, type PaginationChangedEvent as aX, type PaginationConfig as aY, type PinnedDirection as aZ, type PrintOptions as a_, type GetRowHeightParams as aa, type GridAsyncOptions as ab, type GridBatchSaveResult as ac, type GridCellChange as ad, type GridCellRange as ae, type GridColumnsApi as af, type GridDataProcessor as ag, type GridDataProcessorColumn as ah, type GridDataProcessorRequest as ai, type GridDataProcessorResult as aj, type GridDataProcessorRow as ak, type GridDatasource as al, type GridDiagnosticError as am, type GridDiagnostics as an, type GridDiagnosticsApi as ao, type GridEditType as ap, type GridEditingApi as aq, type GridErrorCode as ar, type GridErrorEvent as as, type GridEventBase as at, type GridEventMap as au, type GridFeatureContext as av, type GridFilteringApi as aw, type GridHierarchyApi as ax, type GridIoApi as ay, type GridPaginationApi as az, type GridEventType as b, type RefreshCellsParams as b0, type RemoteBlockCacheSnapshot as b1, type ResolvedGridOptions as b2, type RowClickEvent as b3, type RowDragEndEvent as b4, type RowEditChange as b5, type RowEditValidationParams as b6, type RowEditValidationResult as b7, type RowEditingStartedEvent as b8, type RowEditingStoppedEvent as b9, type ValueFormatterParams as bA, type ValueGetterParams as bB, type ValueSetterParams as bC, type WatermarkConfig as bD, formatText as bE, formatTwo as bF, isColDefGroup as bG, matchLocaleKey as bH, type RowNode as ba, type RowSelectionMode as bb, type RowStyleParams as bc, type RowStyleRule as bd, type RowTone as be, type RowTransaction as bf, type SaveChangeIssue as bg, type SaveChangesHandler as bh, type SaveChangesResult as bi, type SelectEditorOption as bj, type SelectEditorParams as bk, type SelectionChangedEvent as bl, type SetFilterCondition as bm, type SetFilterParams as bn, type SortChangedEvent as bo, type SortDirection as bp, type SortModelItem as bq, type StatusBarConfig as br, type StatusBarPanel as bs, type TextFilterCondition as bt, type TextFilterMatch as bu, type ThemeMode as bv, type TooltipParams as bw, type TreeChildrenLoadFailedEvent as bx, type TreeChildrenLoadedEvent as by, type TreeDataLoadParams as bz, type GridApi as c, type ColumnFilter as d, type AdvancedFilterCondition as e, type AdvancedFilterNode as f, type AdvancedFilterGroup as g, type GridFeature as h, type ColDefGroup as i, type GridStateStore as j, type GridState as k, type GridStateInput as l, type GridSize as m, type CellRendererParams as n, type GridChange as o, type CellRendererFn as p, type FieldPath as q, type FieldPathValue as r, type SaveChangeConflict as s, type ColumnState as t, type ActionPolicy as u, type ActionPolicyContext as v, type ApplyGridStateOptions as w, type CellAlign as x, type CellClassParams as y, type CellClassRule as z };
package/dist/worker.d.cts CHANGED
@@ -1,5 +1,5 @@
1
- import { ai as GridDataProcessorRequest, ag as GridDataProcessor, aj as GridDataProcessorResult } from './options-Cc31xFVh.cjs';
2
- export { ah as GridDataProcessorColumn, ak as GridDataProcessorRow } from './options-Cc31xFVh.cjs';
1
+ import { ai as GridDataProcessorRequest, ag as GridDataProcessor, aj as GridDataProcessorResult } from './options-Bi_m5kXL.cjs';
2
+ export { ah as GridDataProcessorColumn, ak as GridDataProcessorRow } from './options-Bi_m5kXL.cjs';
3
3
 
4
4
  type GridDataProcessorPayload<TData = any> = Omit<GridDataProcessorRequest<TData>, "signal">;
5
5
  interface GridWorkerProcessMessage<TData = any> {
package/dist/worker.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { ai as GridDataProcessorRequest, ag as GridDataProcessor, aj as GridDataProcessorResult } from './options-Cc31xFVh.js';
2
- export { ah as GridDataProcessorColumn, ak as GridDataProcessorRow } from './options-Cc31xFVh.js';
1
+ import { ai as GridDataProcessorRequest, ag as GridDataProcessor, aj as GridDataProcessorResult } from './options-Bi_m5kXL.js';
2
+ export { ah as GridDataProcessorColumn, ak as GridDataProcessorRow } from './options-Bi_m5kXL.js';
3
3
 
4
4
  type GridDataProcessorPayload<TData = any> = Omit<GridDataProcessorRequest<TData>, "signal">;
5
5
  interface GridWorkerProcessMessage<TData = any> {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agile-team/mach-table",
3
- "version": "0.30.0",
3
+ "version": "0.31.0",
4
4
  "description": "Enterprise-grade, framework-agnostic TypeScript data grid with virtualization, editing, grouping and extensibility",
5
5
  "keywords": [
6
6
  "data-grid",
@@ -65,21 +65,21 @@
65
65
  },
66
66
  "./styles/mach-table.css": {
67
67
  "types": "./styles/mach-table.css.d.ts",
68
- "default": "./styles/mach-table.css"
68
+ "default": "./dist/mach-table.css"
69
69
  }
70
70
  },
71
71
  "files": [
72
72
  "dist",
73
- "styles"
73
+ "styles/mach-table.css.d.ts"
74
74
  ],
75
75
  "sideEffects": [
76
76
  "**/*.css"
77
77
  ],
78
78
  "scripts": {
79
- "build": "tsup",
79
+ "build": "tsup && node ../../scripts/build-core-css.mjs",
80
80
  "typecheck": "tsc --noEmit",
81
81
  "test": "vitest run",
82
82
  "test:coverage": "vitest run --coverage"
83
83
  },
84
- "readme": "<p align=\"center\">\n <img src=\"https://raw.githubusercontent.com/ChenyCHENYU/MachTable/main/assets/mach-table-logo.svg\" alt=\"MachTable\" width=\"760\" />\n</p>\n\n# @agile-team/mach-table\n\nMachTable 0.30.0 的框架无关 TypeScript Core:零运行时依赖,提供行列双虚拟化、领域化 API、单元格/整行编辑、树与分组、随机访问远程数据、区段隔离状态持久化和可诊断扩展系统。本版增加可选服务端导出请求快照,不改变现有网格行为。\n\n```bash\npnpm add @agile-team/mach-table\n```\n\n```ts\nimport { createGrid, indexColumn } from \"@agile-team/mach-table\";\nimport \"@agile-team/mach-table/styles/mach-table.css\";\n\nconst api = createGrid(document.querySelector(\"#grid\")!, {\n columnDefs: [\n indexColumn({ headerName: \"序号\" }),\n { field: \"id\", headerName: \"ID\", width: 120 },\n { field: \"name\", headerName: \"名称\", flex: 1, editable: true }\n ],\n rowData: [{ id: \"1\", name: \"MachTable\" }],\n rowKey: \"id\",\n enableColumnResize: true,\n persistence: { key: \"tenant:user:customers\", sections: [\"columns\"] }\n});\n\napi.batch((grid) => {\n grid.rows.transact({ update: [{ id: \"1\", name: \"Updated\" }] });\n grid.columns.setVisible(\"internalNote\", false);\n grid.view.refreshCells({ rowIds: [\"1\"] });\n});\n\nconst saved = await api.editing.save(orderApi.saveChanges);\nconsole.table(saved.conflicts);\nconsole.info(api.diagnostics.get());\n\n// 原生宿主卸载时必须销毁;Vue/React 适配器会自动处理。\napi.destroy();\n```\n\n`persistence.sections` 同时约束进入 store 的数据与恢复范围;异步 store 写入有序,晚到加载不会覆盖加载期间的用户操作。\n\n单元格编辑通过内置对勾/取消控件显式结束,普通鼠标和焦点变化不会误提交;Enter、Escape、Tab 仍提供完整键盘路径。筛选、列设置、上下文菜单和操作菜单会继承所属表格实例的主题变量,不受宿主页面全局样式影响。\n\n`loading: true` 默认展示轻量表格骨架与本地化状态文案,空数据默认展示内置插画;需要品牌化时再通过 `overlayLoadingTemplate`、`overlayNoRowsTemplate` 覆盖,基础页面无需重复实现 loading/empty DOM。\n\n公共命令按 `rows`、`columns`、`selection`、`editing`、`filtering`、`sorting`、`pagination`、`hierarchy`、`view`、`state`、`io`、`diagnostics` 划分。完整签名见 [GridApi](https://github.com/ChenyCHENYU/MachTable/blob/main/docs/api/grid-api.md)。\n\n大型本地数据 Worker 使用独立入口:\n\n```ts\nimport { createWorkerDataProcessor } from \"@agile-team/mach-table/worker\";\n```\n\nVue/React 项目请只安装对应适配包,它会自动安装并重导出 Core:\n\n- [@agile-team/mach-table-vue](https://www.npmjs.com/package/@agile-team/mach-table-vue)\n- [@agile-team/mach-table-react](https://www.npmjs.com/package/@agile-team/mach-table-react)\n\n文档:[快速开始](https://github.com/ChenyCHENYU/MachTable/blob/main/docs/guide/getting-started.md) · [企业接入](https://github.com/ChenyCHENYU/MachTable/blob/main/docs/guide/enterprise-integration.md) · [API](https://github.com/ChenyCHENYU/MachTable/tree/main/docs/api)\n\nSource-available © ChenyCHENYU (Agile Team). 任何使用均须事先取得书面授权。详见 [LICENSE](https://github.com/ChenyCHENYU/MachTable/blob/main/LICENSE) 与[授权流程](https://github.com/ChenyCHENYU/MachTable/blob/main/LICENSING.md)。\n"
84
+ "readme": "<p align=\"center\">\n <img src=\"https://raw.githubusercontent.com/ChenyCHENYU/MachTable/main/assets/mach-table-logo.svg\" alt=\"MachTable\" width=\"760\" />\n</p>\n\n# @agile-team/mach-table\n\nMachTable 0.31.0 的框架无关 TypeScript Core:零运行时依赖,提供行列双虚拟化、领域化 API、单元格/整行编辑、树与分组、随机访问远程数据、区段隔离状态持久化和可诊断扩展系统。本版增加可配置整行颜色、完善主题化行拖拽与键盘排序,并修正树交互与列宽拖动反馈。\n\n```bash\npnpm add @agile-team/mach-table\n```\n\n```ts\nimport { createGrid, indexColumn } from \"@agile-team/mach-table\";\nimport \"@agile-team/mach-table/styles/mach-table.css\";\n\nconst api = createGrid(document.querySelector(\"#grid\")!, {\n columnDefs: [\n indexColumn({ headerName: \"序号\" }),\n { field: \"id\", headerName: \"ID\", width: 120 },\n { field: \"name\", headerName: \"名称\", flex: 1, editable: true }\n ],\n rowData: [{ id: \"1\", name: \"MachTable\" }],\n rowKey: \"id\",\n enableColumnResize: true,\n persistence: { key: \"tenant:user:customers\", sections: [\"columns\"] }\n});\n\napi.batch((grid) => {\n grid.rows.transact({ update: [{ id: \"1\", name: \"Updated\" }] });\n grid.columns.setVisible(\"internalNote\", false);\n grid.view.refreshCells({ rowIds: [\"1\"] });\n});\n\nconst saved = await api.editing.save(orderApi.saveChanges);\nconsole.table(saved.conflicts);\nconsole.info(api.diagnostics.get());\n\n// 原生宿主卸载时必须销毁;Vue/React 适配器会自动处理。\napi.destroy();\n```\n\n`persistence.sections` 同时约束进入 store 的数据与恢复范围;异步 store 写入有序,晚到加载不会覆盖加载期间的用户操作。\n\n单元格编辑通过内置对勾/取消控件显式结束,普通鼠标和焦点变化不会误提交;Enter、Escape、Tab 仍提供完整键盘路径。筛选、列设置、上下文菜单和操作菜单会继承所属表格实例的主题变量,不受宿主页面全局样式影响。\n\n`loading: true` 默认展示轻量表格骨架与本地化状态文案,空数据默认展示内置插画;需要品牌化时再通过 `overlayLoadingTemplate`、`overlayNoRowsTemplate` 覆盖,基础页面无需重复实现 loading/empty DOM。\n\n公共命令按 `rows`、`columns`、`selection`、`editing`、`filtering`、`sorting`、`pagination`、`hierarchy`、`view`、`state`、`io`、`diagnostics` 划分。完整签名见 [GridApi](https://github.com/ChenyCHENYU/MachTable/blob/main/docs/api/grid-api.md)。\n\n大型本地数据 Worker 使用独立入口:\n\n```ts\nimport { createWorkerDataProcessor } from \"@agile-team/mach-table/worker\";\n```\n\nVue/React 项目请只安装对应适配包,它会自动安装并重导出 Core:\n\n- [@agile-team/mach-table-vue](https://www.npmjs.com/package/@agile-team/mach-table-vue)\n- [@agile-team/mach-table-react](https://www.npmjs.com/package/@agile-team/mach-table-react)\n\n## 行拖拽与条件整行颜色\n\n```ts\nimport { dragColumn, type GridOptions } from \"@agile-team/mach-table\";\n\ninterface Plan { id: string; name: string; status: string }\nconst options: GridOptions<Plan> = {\n rowKey: \"id\",\n columnDefs: [dragColumn(), { field: \"name\" }, { field: \"status\" }],\n rowStyleRules: [\n { when: ({ data }) => data.status === \"pending\", tone: \"warning\" },\n { when: ({ data }) => data.status === \"failed\", tone: \"danger\" },\n { when: ({ data }) => data.status === \"done\", tone: \"success\" }\n ]\n};\n```\n\n状态码由应用定义,包内不识别业务状态。颜色规则取第一条命中结果,未命中时沿用默认样式;支持自定义背景/文字颜色、固定列、明暗主题、选择和虚拟行复用。拖拽提供主题手柄、落点线、位置浮层、边缘滚动、Esc 取消和 Alt + ↑/↓ 移动。扁平外部数据设置 `applyRowDrag: false`,由 `onRowDragEnd` 处理持久化;自动模式先完成移动再发出事件,使用 `targetIndex` 读取最终下标。树、分组及排序等自动模式限制见[完整配方](https://github.com/ChenyCHENYU/MachTable/blob/main/docs/recipes/row-presentation.md)。\n\n文档:[快速开始](https://github.com/ChenyCHENYU/MachTable/blob/main/docs/guide/getting-started.md) · [企业接入](https://github.com/ChenyCHENYU/MachTable/blob/main/docs/guide/enterprise-integration.md) · [API](https://github.com/ChenyCHENYU/MachTable/tree/main/docs/api)\n\nSource-available © ChenyCHENYU (Agile Team). 任何使用均须事先取得书面授权。详见 [LICENSE](https://github.com/ChenyCHENYU/MachTable/blob/main/LICENSE) 与[授权流程](https://github.com/ChenyCHENYU/MachTable/blob/main/LICENSING.md)。\n"
85
85
  }