@endge/ui-vue-shadcn 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +39 -0
- package/dist/domain/core/endge-vue-shadcn.d.ts +19 -0
- package/dist/domain/types/filter-renderer.type.d.ts +5 -0
- package/dist/domain/types/sfc-render.type.d.ts +143 -0
- package/dist/main.d.ts +20 -0
- package/dist/model/render/sfc/SFCVueRenderInspection.d.ts +12 -0
- package/dist/model/render/sfc/SFCVueRuntimeBridge.d.ts +43 -0
- package/dist/model/render/sfc/vue-shadcn-renderers.d.ts +15 -0
- package/dist/model/render/sfc/vue-shadcn-sfc-adapter.d.ts +4 -0
- package/dist/model/render/sfc/vue-shadcn-table-renderer.d.ts +3 -0
- package/dist/model/style/EndgeDOMStyleRuntime.d.ts +10 -0
- package/dist/model/style/endge-dom-style.d.ts +17 -0
- package/dist/test/SFCIntrinsicEvents.test.d.ts +1 -0
- package/dist/test/SFCVueRenderInspection.test.d.ts +1 -0
- package/dist/test/VueShadcnAdapter.test.d.ts +1 -0
- package/dist/test/VueShadcnGrid.test.d.ts +1 -0
- package/dist/test/VueShadcnMenu.test.d.ts +1 -0
- package/dist/test/VueShadcnTable.test.d.ts +1 -0
- package/dist/test/VueShadcnVirtualization.test.d.ts +1 -0
- package/dist/ui/filter/VueShadcnFilterControlRenderer.d.ts +33 -0
- package/dist/ui/filter/VueShadcnFilterField.vue.d.ts +13 -0
- package/dist/ui/filter/VueShadcnFilterRenderer.vue.d.ts +3 -0
- package/dist/ui/filter/index.d.ts +3 -0
- package/dist/ui/layout/VueShadcnShell.vue.d.ts +22 -0
- package/dist/ui/overlay/ShadcnMenuRoot.vue.d.ts +4 -0
- package/dist/ui/overlay/shadcn-menu-manager.d.ts +66 -0
- package/dist/ui/primitives/ShadcnBadge.vue.d.ts +22 -0
- package/dist/ui/primitives/ShadcnCheckbox.vue.d.ts +8 -0
- package/dist/ui/primitives/ShadcnIcon.vue.d.ts +11 -0
- package/dist/ui/primitives/ShadcnInput.vue.d.ts +12 -0
- package/dist/ui/primitives/ShadcnSelect.vue.d.ts +14 -0
- package/dist/ui/primitives/ShadcnSeparator.vue.d.ts +7 -0
- package/dist/ui/primitives/ShadcnTextarea.vue.d.ts +9 -0
- package/dist/ui/primitives/index.d.ts +7 -0
- package/dist/ui/render/sfc/SFCRender_Base.d.ts +8 -0
- package/dist/ui/render/sfc/SFCRender_BoundaryRegistry.d.ts +15 -0
- package/dist/ui/render/sfc/SFCRender_Component.d.ts +3 -0
- package/dist/ui/render/sfc/SFCRender_Context.d.ts +8 -0
- package/dist/ui/render/sfc/SFCRender_Evaluator.d.ts +17 -0
- package/dist/ui/render/sfc/SFCRender_Node.d.ts +6 -0
- package/dist/ui/render/sfc/SFCRender_TableAlignment.d.ts +8 -0
- package/dist/ui/render/sfc/SFCRender_TableStyle.d.ts +41 -0
- package/dist/ui/render/sfc/SFC_Renderer.vue.d.ts +3 -0
- package/dist/ui/render/sfc/SFC_RuntimeRenderer.vue.d.ts +3 -0
- package/dist/ui/table/ShadcnSfcDataTable.vue.d.ts +19 -0
- package/dist/ui/table/ShadcnTableColumnManager.vue.d.ts +9 -0
- package/dist/ui/table/table.types.d.ts +48 -0
- package/dist/vue-shadcn.css +1 -0
- package/dist/vue-shadcn.js +12835 -0
- package/package.json +55 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { EndgeEnvId, EndgeProjectId } from '@endge/core';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
project: EndgeProjectId;
|
|
4
|
+
env: EndgeEnvId;
|
|
5
|
+
};
|
|
6
|
+
declare function __VLS_template(): {
|
|
7
|
+
attrs: Partial<{}>;
|
|
8
|
+
slots: {
|
|
9
|
+
default?(_: {}): any;
|
|
10
|
+
};
|
|
11
|
+
refs: {};
|
|
12
|
+
rootEl: any;
|
|
13
|
+
};
|
|
14
|
+
type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
|
|
15
|
+
declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
16
|
+
declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
|
|
17
|
+
export default _default;
|
|
18
|
+
type __VLS_WithTemplateSlots<T, S> = T & {
|
|
19
|
+
new (): {
|
|
20
|
+
$slots: S;
|
|
21
|
+
};
|
|
22
|
+
};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
declare const _default: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {
|
|
2
|
+
menuRef: HTMLDivElement;
|
|
3
|
+
}, any>;
|
|
4
|
+
export default _default;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { ContextMenuDescriptor, ContextMenuItemDescriptor, ContextMenuNodeDescriptor, RuntimeActionContext } from '@endge/core';
|
|
2
|
+
export type ShadcnMenuAnchor = {
|
|
3
|
+
kind: 'point';
|
|
4
|
+
x: number;
|
|
5
|
+
y: number;
|
|
6
|
+
} | {
|
|
7
|
+
kind: 'element';
|
|
8
|
+
left: number;
|
|
9
|
+
top: number;
|
|
10
|
+
right: number;
|
|
11
|
+
bottom: number;
|
|
12
|
+
};
|
|
13
|
+
export interface ShadcnMenuOpenInput<TContext extends RuntimeActionContext = RuntimeActionContext> {
|
|
14
|
+
ownerId: string;
|
|
15
|
+
anchor: ShadcnMenuAnchor;
|
|
16
|
+
menu: ContextMenuDescriptor;
|
|
17
|
+
context: TContext;
|
|
18
|
+
}
|
|
19
|
+
export interface ShadcnMenuState {
|
|
20
|
+
open: boolean;
|
|
21
|
+
ownerId: string | null;
|
|
22
|
+
anchor: ShadcnMenuAnchor;
|
|
23
|
+
menu: ContextMenuDescriptor | null;
|
|
24
|
+
context: RuntimeActionContext | null;
|
|
25
|
+
}
|
|
26
|
+
export declare const shadcnMenuState: {
|
|
27
|
+
open: boolean;
|
|
28
|
+
ownerId: string | null;
|
|
29
|
+
anchor: {
|
|
30
|
+
kind: "point";
|
|
31
|
+
x: number;
|
|
32
|
+
y: number;
|
|
33
|
+
} | {
|
|
34
|
+
kind: "element";
|
|
35
|
+
left: number;
|
|
36
|
+
top: number;
|
|
37
|
+
right: number;
|
|
38
|
+
bottom: number;
|
|
39
|
+
};
|
|
40
|
+
menu: {
|
|
41
|
+
kind: "context-menu";
|
|
42
|
+
items: ({
|
|
43
|
+
kind: "item";
|
|
44
|
+
id: string;
|
|
45
|
+
label: string;
|
|
46
|
+
action: import('@endge/core').RuntimeActionId;
|
|
47
|
+
input?: unknown;
|
|
48
|
+
icon?: string | undefined;
|
|
49
|
+
} | {
|
|
50
|
+
kind: "separator";
|
|
51
|
+
id: string;
|
|
52
|
+
})[];
|
|
53
|
+
} | null;
|
|
54
|
+
context: {
|
|
55
|
+
surface: import('@endge/core').RuntimeActionSurface;
|
|
56
|
+
runtimeId?: string | undefined;
|
|
57
|
+
target?: unknown;
|
|
58
|
+
} | null;
|
|
59
|
+
};
|
|
60
|
+
export declare function elementMenuAnchor(element: Element): ShadcnMenuAnchor;
|
|
61
|
+
export declare function pointMenuAnchor(x: number, y: number): ShadcnMenuAnchor;
|
|
62
|
+
export declare function openShadcnMenu(input: ShadcnMenuOpenInput): void;
|
|
63
|
+
export declare function closeShadcnMenu(ownerId?: string): void;
|
|
64
|
+
export declare function getExecutableShadcnMenuItems(): ContextMenuNodeDescriptor[];
|
|
65
|
+
export declare function executeShadcnMenuItem(item: ContextMenuItemDescriptor): Promise<void>;
|
|
66
|
+
export declare function resolveShadcnMenuItemLabel(item: ContextMenuItemDescriptor): string;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
type __VLS_Props = {
|
|
2
|
+
tone?: string;
|
|
3
|
+
};
|
|
4
|
+
declare function __VLS_template(): {
|
|
5
|
+
attrs: Partial<{}>;
|
|
6
|
+
slots: {
|
|
7
|
+
default?(_: {}): any;
|
|
8
|
+
};
|
|
9
|
+
refs: {};
|
|
10
|
+
rootEl: any;
|
|
11
|
+
};
|
|
12
|
+
type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
|
|
13
|
+
declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
|
|
14
|
+
tone: string;
|
|
15
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
16
|
+
declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
|
|
17
|
+
export default _default;
|
|
18
|
+
type __VLS_WithTemplateSlots<T, S> = T & {
|
|
19
|
+
new (): {
|
|
20
|
+
$slots: S;
|
|
21
|
+
};
|
|
22
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
type __VLS_Props = {
|
|
2
|
+
checked?: boolean;
|
|
3
|
+
label?: string;
|
|
4
|
+
readonly?: boolean;
|
|
5
|
+
disabled?: boolean;
|
|
6
|
+
};
|
|
7
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
8
|
+
export default _default;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
type __VLS_Props = {
|
|
2
|
+
name?: string;
|
|
3
|
+
size?: number;
|
|
4
|
+
strokeWidth?: number;
|
|
5
|
+
};
|
|
6
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
|
|
7
|
+
name: string;
|
|
8
|
+
size: number;
|
|
9
|
+
strokeWidth: number;
|
|
10
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
11
|
+
export default _default;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
type __VLS_Props = {
|
|
2
|
+
type: string;
|
|
3
|
+
value: string | number;
|
|
4
|
+
placeholder?: string;
|
|
5
|
+
min?: unknown;
|
|
6
|
+
max?: unknown;
|
|
7
|
+
step?: unknown;
|
|
8
|
+
readonly?: boolean;
|
|
9
|
+
disabled?: boolean;
|
|
10
|
+
};
|
|
11
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
12
|
+
export default _default;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { SourceFieldOption } from '@endge/core';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
options: SourceFieldOption[];
|
|
4
|
+
selectedValues: string[];
|
|
5
|
+
placeholder?: string;
|
|
6
|
+
multiple?: boolean;
|
|
7
|
+
readonly?: boolean;
|
|
8
|
+
disabled?: boolean;
|
|
9
|
+
};
|
|
10
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
|
|
11
|
+
root: HTMLSpanElement;
|
|
12
|
+
hiddenSelect: HTMLSelectElement;
|
|
13
|
+
}, any>;
|
|
14
|
+
export default _default;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
type __VLS_Props = {
|
|
2
|
+
orientation?: 'horizontal' | 'vertical';
|
|
3
|
+
};
|
|
4
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
|
|
5
|
+
orientation: "horizontal" | "vertical";
|
|
6
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
7
|
+
export default _default;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
type __VLS_Props = {
|
|
2
|
+
value: string;
|
|
3
|
+
placeholder?: string;
|
|
4
|
+
rows?: string | number;
|
|
5
|
+
readonly?: boolean;
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
};
|
|
8
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
9
|
+
export default _default;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { default as ShadcnBadge } from './ShadcnBadge.vue';
|
|
2
|
+
export { default as ShadcnCheckbox } from './ShadcnCheckbox.vue';
|
|
3
|
+
export { default as ShadcnIcon } from './ShadcnIcon.vue';
|
|
4
|
+
export { default as ShadcnInput } from './ShadcnInput.vue';
|
|
5
|
+
export { default as ShadcnSelect } from './ShadcnSelect.vue';
|
|
6
|
+
export { default as ShadcnSeparator } from './ShadcnSeparator.vue';
|
|
7
|
+
export { default as ShadcnTextarea } from './ShadcnTextarea.vue';
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { RComponentSFC_IR_ElementNode, EndgeStyleMatchNode } from '@endge/core';
|
|
2
|
+
import { SFCVueRenderConditionState, SFCVueRenderContext, SFCVueRenderFunction } from '../../../domain/types/sfc-render.type';
|
|
3
|
+
/** Выполняет общий SFC render pipeline вокруг primitive renderer-а. */
|
|
4
|
+
export declare function SFCRender_Base(renderFn: SFCVueRenderFunction): SFCVueRenderFunction;
|
|
5
|
+
/** Вычисляет состояние if / else-if / else для sibling chain. */
|
|
6
|
+
export declare function resolveSFCConditionState(node: RComponentSFC_IR_ElementNode, context: SFCVueRenderContext, previousMatched: boolean): SFCVueRenderConditionState;
|
|
7
|
+
/** Готовит renderer-neutral attrs для primitive-тега. */
|
|
8
|
+
export declare function createSFCBaseAttrs(node: RComponentSFC_IR_ElementNode, props: Record<string, unknown>, styleNode?: EndgeStyleMatchNode, runtimeScopeIds?: readonly string[]): Record<string, unknown>;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { RuntimeBoundaryPatch } from '@endge/core';
|
|
2
|
+
import { InjectionKey } from 'vue';
|
|
3
|
+
/** Controller render-boundary, который умеет применить runtime patch локально. */
|
|
4
|
+
export interface SFCVueBoundaryController {
|
|
5
|
+
applyPatch: (patch: RuntimeBoundaryPatch) => boolean | Promise<boolean>;
|
|
6
|
+
}
|
|
7
|
+
/** Registry runtime boundaries внутри одного SFC render root. */
|
|
8
|
+
export interface SFCVueBoundaryRegistry {
|
|
9
|
+
register: (boundaryId: string, controller: SFCVueBoundaryController) => VoidFunction;
|
|
10
|
+
applyPatch: (patch: RuntimeBoundaryPatch) => Promise<boolean>;
|
|
11
|
+
}
|
|
12
|
+
/** Vue injection key registry текущего SFC render root. */
|
|
13
|
+
export declare const SFCVueBoundaryRegistryKey: InjectionKey<SFCVueBoundaryRegistry>;
|
|
14
|
+
/** Создает локальный registry boundary controllers для одного render root. */
|
|
15
|
+
export declare function createSFCVueBoundaryRegistry(): SFCVueBoundaryRegistry;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ComponentSFCEventBoundary, ComponentSFCRuntimeHost, EndgeStyleMatchNode, EndgeStyleSheetArtifact, RComponentSFC_IR, SFCRenderInspectionSessionLike } from '@endge/core';
|
|
2
|
+
import { SFCVueRenderContext, SFCVueRenderIteration } from '../../../domain/types/sfc-render.type';
|
|
3
|
+
/** Создает root context для одного render pass SFC renderer adapter. */
|
|
4
|
+
export declare function createSFCVueRenderContext(props: Record<string, unknown> | undefined, renderVersion?: number, host?: ComponentSFCRuntimeHost | null, ir?: RComponentSFC_IR | null, componentStack?: readonly string[], consumerScope?: string, inheritedStyleArtifacts?: readonly EndgeStyleSheetArtifact[], inheritedEventBoundary?: ComponentSFCEventBoundary | null, inspection?: SFCRenderInspectionSessionLike | null): SFCVueRenderContext;
|
|
5
|
+
/** Создает дочерний context с дополнительными локальными значениями. */
|
|
6
|
+
export declare function extendSFCVueRenderContext(context: SFCVueRenderContext, locals: Record<string, unknown>, iteration?: SFCVueRenderIteration | null, consumerScope?: string): SFCVueRenderContext;
|
|
7
|
+
/** Creates a logical child frame without carrying physical Vue wrappers into selector semantics. */
|
|
8
|
+
export declare function extendSFCVueStyleContext(context: SFCVueRenderContext, parent: EndgeStyleMatchNode): SFCVueRenderContext;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { RComponentSFC_IR_Value } from '@endge/core';
|
|
2
|
+
import { SFCVueRenderBinding, SFCVueRenderContext } from '../../../domain/types/sfc-render.type';
|
|
3
|
+
/** Вычисляет безопасное подмножество SFC IR value без eval и runtime зависимостей. */
|
|
4
|
+
export declare function evaluateSFCValue(value: RComponentSFC_IR_Value | undefined, context: SFCVueRenderContext): unknown;
|
|
5
|
+
/** Вычисляет будущий binding-контракт renderer adapter. */
|
|
6
|
+
export declare function evaluateSFCBinding(binding: SFCVueRenderBinding, context: SFCVueRenderContext): unknown;
|
|
7
|
+
/** Вычисляет props object из IR props map. */
|
|
8
|
+
export declare function evaluateSFCProps(props: Record<string, RComponentSFC_IR_Value> | undefined, context: SFCVueRenderContext): Record<string, unknown>;
|
|
9
|
+
/** Приводит любое значение к условию control-flow. */
|
|
10
|
+
export declare function isTruthySFCValue(value: unknown): boolean;
|
|
11
|
+
/** Читает путь из locals, затем из props. Отсутствующие поля возвращают undefined. */
|
|
12
|
+
export declare function readSFCPath(path: string, context: SFCVueRenderContext): unknown;
|
|
13
|
+
/**
|
|
14
|
+
* Безопасно вычисляет SFC expression через AST interpreter без eval/Function.
|
|
15
|
+
* Простые DataPath остаются на быстром пути, сложные AST кэшируются по source.
|
|
16
|
+
*/
|
|
17
|
+
export declare function evaluateSFCExpression(expression: string, context: SFCVueRenderContext): unknown;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { RComponentSFC_IR_Node } from '@endge/core';
|
|
2
|
+
import { SFCVueRenderContext, SFCVueRenderH, SFCVueRenderListResult, SFCVueRenderResult } from '../../../domain/types/sfc-render.type';
|
|
3
|
+
/** Рендерит список SFC IR узлов с учетом sibling if / else-if / else chain. */
|
|
4
|
+
export declare function renderSFCNodes(h: SFCVueRenderH, nodes: RComponentSFC_IR_Node[] | undefined, context: SFCVueRenderContext): SFCVueRenderListResult;
|
|
5
|
+
/** Рендерит один SFC IR узел. */
|
|
6
|
+
export declare function renderSFCNode(h: SFCVueRenderH, node: RComponentSFC_IR_Node, context: SFCVueRenderContext): SFCVueRenderResult;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export type SFCTableCellAlign = 'left' | 'center' | 'right';
|
|
2
|
+
export type SFCTableCellVerticalAlign = 'top' | 'middle' | 'bottom';
|
|
3
|
+
export interface SFCTableCellAlignment {
|
|
4
|
+
horizontal: SFCTableCellAlign;
|
|
5
|
+
vertical: SFCTableCellVerticalAlign;
|
|
6
|
+
}
|
|
7
|
+
/** Нормализует renderer-neutral значения выравнивания ячеек Table. */
|
|
8
|
+
export declare function normalizeSFCTableCellAlignment(horizontal: unknown, vertical: unknown): SFCTableCellAlignment;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { EndgeStyleMatchNode } from '@endge/core';
|
|
2
|
+
import { SFCVueRenderContext } from '../../../domain/types/sfc-render.type';
|
|
3
|
+
export type SFCTablePublicPart = 'grid' | 'header' | 'header-cell' | 'header-content' | 'body' | 'row' | 'cell' | 'cell-content' | 'group-row';
|
|
4
|
+
export interface SFCTablePublicPartAttrs extends Record<string, unknown> {
|
|
5
|
+
part: SFCTablePublicPart;
|
|
6
|
+
'data-endge-part': SFCTablePublicPart;
|
|
7
|
+
class: string[];
|
|
8
|
+
}
|
|
9
|
+
export interface SFCTablePublicSurface {
|
|
10
|
+
node: EndgeStyleMatchNode;
|
|
11
|
+
attrs: SFCTablePublicPartAttrs;
|
|
12
|
+
}
|
|
13
|
+
export interface SFCTableStyleContract {
|
|
14
|
+
context: SFCVueRenderContext;
|
|
15
|
+
grid: SFCTablePublicSurface;
|
|
16
|
+
header: SFCTablePublicSurface;
|
|
17
|
+
body: SFCTablePublicSurface;
|
|
18
|
+
groupRow: SFCTablePublicSurface;
|
|
19
|
+
}
|
|
20
|
+
export interface SFCTableColumnStyleSurfaces {
|
|
21
|
+
headerCell: SFCTablePublicSurface;
|
|
22
|
+
headerContent: SFCTablePublicSurface;
|
|
23
|
+
}
|
|
24
|
+
export interface SFCTableCellStyleSurfaces {
|
|
25
|
+
cell: SFCTablePublicSurface;
|
|
26
|
+
cellContent: SFCTablePublicSurface;
|
|
27
|
+
}
|
|
28
|
+
export declare const SFC_TABLE_ROW_CLASS_FIELD = "__endgeStyleRowClass";
|
|
29
|
+
export declare function createSFCTableStyleContract(context: SFCVueRenderContext): SFCTableStyleContract;
|
|
30
|
+
export declare function createSFCTableColumnStyleSurfaces(contract: SFCTableStyleContract, columnCount: number): SFCTableColumnStyleSurfaces[];
|
|
31
|
+
export declare function decorateSFCTableRows(rows: readonly Record<string, unknown>[], columnCount: number, contract: SFCTableStyleContract): Record<string, unknown>[];
|
|
32
|
+
/**
|
|
33
|
+
* Decorates only one contiguous viewport window while preserving logical
|
|
34
|
+
* row indexes from the complete table. TanStack adapters use this to avoid
|
|
35
|
+
* materializing EndgeCSS match nodes for every row before first paint.
|
|
36
|
+
*/
|
|
37
|
+
export declare function decorateSFCTableRowWindow(rows: readonly Record<string, unknown>[], columnCount: number, contract: SFCTableStyleContract, startIndex: number, totalRowCount: number): Record<string, unknown>[];
|
|
38
|
+
export declare function getSFCTableCellStyleSurfaces(row: Record<string, unknown>, columnIndex: number): SFCTableCellStyleSurfaces | null;
|
|
39
|
+
export declare function toRevoGridSurfaceProps(attrs: SFCTablePublicPartAttrs): Record<string, unknown>;
|
|
40
|
+
/** Applies logical surfaces to RevoGrid-owned DOM without leaking vendor selectors into EndgeCSS. */
|
|
41
|
+
export declare function syncSFCTableDOMSurfaces(grid: HTMLElement, contract: SFCTableStyleContract): void;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { SFCVueRenderAdapterProps } from '../../../domain/types/sfc-render.type';
|
|
2
|
+
declare const _default: import('vue').DefineComponent<SFCVueRenderAdapterProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<SFCVueRenderAdapterProps> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
3
|
+
export default _default;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { SFCVueRuntimeRendererProps } from '../../../domain/types/sfc-render.type';
|
|
2
|
+
declare const _default: import('vue').DefineComponent<SFCVueRuntimeRendererProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<SFCVueRuntimeRendererProps> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
3
|
+
export default _default;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { ComponentSFCTableColumnPinStateItem, ComponentSFCTableSortStateItem } from '@endge/core';
|
|
2
|
+
import { EndgeShadcnTableColumn, EndgeShadcnTableProps } from './table.types';
|
|
3
|
+
declare const _default: import('vue').DefineComponent<EndgeShadcnTableProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<EndgeShadcnTableProps> & Readonly<{}>, {
|
|
4
|
+
source: Record<string, unknown>[];
|
|
5
|
+
columns: EndgeShadcnTableColumn[];
|
|
6
|
+
eventBindings: import('@endge/core').RComponentSFC_IR_EventBinding[];
|
|
7
|
+
selectionMode: import('@endge/core').TableSelectionMode;
|
|
8
|
+
defaultSort: ComponentSFCTableSortStateItem[];
|
|
9
|
+
defaultPin: ComponentSFCTableColumnPinStateItem[];
|
|
10
|
+
defaultHidden: string[];
|
|
11
|
+
rowSize: number;
|
|
12
|
+
paging: import('./table.types').EndgeShadcnTablePaging;
|
|
13
|
+
pageSize: number;
|
|
14
|
+
pageSizes: number[];
|
|
15
|
+
lazy: boolean;
|
|
16
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
|
|
17
|
+
scrollRoot: HTMLDivElement;
|
|
18
|
+
}, HTMLDivElement>;
|
|
19
|
+
export default _default;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Table } from '@tanstack/vue-table';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
table: Table<Record<string, unknown>>;
|
|
4
|
+
};
|
|
5
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
|
|
6
|
+
root: HTMLDivElement;
|
|
7
|
+
sortableRef: HTMLDivElement;
|
|
8
|
+
}, HTMLDivElement>;
|
|
9
|
+
export default _default;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { ComponentSFCTableColumnMenuDescriptor, ComponentSFCTableColumnPinMode, ComponentSFCTableColumnPinStateItem, ComponentSFCTableSortComparator, ComponentSFCTableSortMode, ComponentSFCTableSortStateItem, ComponentSFCEventBoundary, RComponentSFC_IR_EventBinding, RComponentSFC_IR_Node, TableSelectionMode } from '@endge/core';
|
|
2
|
+
import { SFCVueRenderResult, SFCVueRuntimeStateController } from '../../domain/types/sfc-render.type';
|
|
3
|
+
import { SFCTableColumnStyleSurfaces, SFCTableStyleContract } from '../render/sfc/SFCRender_TableStyle';
|
|
4
|
+
export interface EndgeShadcnTableColumnSort {
|
|
5
|
+
sortable: boolean;
|
|
6
|
+
comparator: ComponentSFCTableSortComparator;
|
|
7
|
+
paths: string[];
|
|
8
|
+
}
|
|
9
|
+
export interface EndgeShadcnTableColumn {
|
|
10
|
+
index: number;
|
|
11
|
+
key: string;
|
|
12
|
+
title: string;
|
|
13
|
+
width: number | null;
|
|
14
|
+
minWidth: number;
|
|
15
|
+
maxWidth: number;
|
|
16
|
+
pinnable: boolean;
|
|
17
|
+
sort: EndgeShadcnTableColumnSort | null;
|
|
18
|
+
cellNodes: RComponentSFC_IR_Node[];
|
|
19
|
+
styleSurfaces: SFCTableColumnStyleSurfaces;
|
|
20
|
+
}
|
|
21
|
+
export type EndgeShadcnTablePaging = 'pages' | 'virtual';
|
|
22
|
+
export interface EndgeShadcnTableProps {
|
|
23
|
+
boundaryId: string;
|
|
24
|
+
nodeId?: string;
|
|
25
|
+
tableRef?: string | null;
|
|
26
|
+
tableId: string;
|
|
27
|
+
eventBoundary?: ComponentSFCEventBoundary | null;
|
|
28
|
+
eventBindings?: RComponentSFC_IR_EventBinding[];
|
|
29
|
+
selectionMode?: TableSelectionMode;
|
|
30
|
+
runtimeState: SFCVueRuntimeStateController | null;
|
|
31
|
+
columns: EndgeShadcnTableColumn[];
|
|
32
|
+
source: Record<string, unknown>[];
|
|
33
|
+
styleContract: SFCTableStyleContract;
|
|
34
|
+
rowKey: string;
|
|
35
|
+
sortMode: ComponentSFCTableSortMode;
|
|
36
|
+
pinMode: ComponentSFCTableColumnPinMode;
|
|
37
|
+
columnMenu: ComponentSFCTableColumnMenuDescriptor;
|
|
38
|
+
defaultSort: ComponentSFCTableSortStateItem[];
|
|
39
|
+
defaultPin: ComponentSFCTableColumnPinStateItem[];
|
|
40
|
+
defaultHidden: string[];
|
|
41
|
+
rowSize: number;
|
|
42
|
+
paging?: EndgeShadcnTablePaging;
|
|
43
|
+
pageSize?: number;
|
|
44
|
+
pageSizes?: number[];
|
|
45
|
+
lazy?: boolean;
|
|
46
|
+
renderVersion: number;
|
|
47
|
+
renderCell: (column: EndgeShadcnTableColumn, row: Record<string, unknown>, rowIndex: number, rowId: string) => SFCVueRenderResult;
|
|
48
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.endge-shadcn-text,.endge-shadcn-datetime,.endge-shadcn-number,.endge-shadcn-icon,.endge-shadcn-badge,.endge-shadcn-checkbox-field,.endge-shadcn-input,.endge-shadcn-textarea,.endge-shadcn-select-field{box-sizing:border-box;font:inherit}.endge-shadcn-text{color:var(--foreground, #18181b)}.endge-shadcn-datetime{color:var(--muted-foreground, #71717a);font-variant-numeric:tabular-nums}.endge-shadcn-number{color:var(--foreground, #18181b);font-variant-numeric:tabular-nums;font-weight:500}.endge-shadcn-icon{align-items:center;color:var(--muted-foreground, #71717a);display:inline-flex;font-size:.75rem;justify-content:center;line-height:1}.endge-shadcn-badge{align-items:center;background:var(--primary, #18181b);border:1px solid transparent;border-radius:999px;color:var(--primary-foreground, #fafafa);display:inline-flex;font-size:.75rem;font-weight:600;gap:.25rem;line-height:1;min-height:1.375rem;padding:.2rem .55rem;white-space:nowrap}.endge-shadcn-badge[data-tone=muted],.endge-shadcn-badge[data-tone=neutral]{background:var(--secondary, #f4f4f5);border-color:var(--border, #e4e4e7);color:var(--secondary-foreground, #27272a)}.endge-shadcn-badge[data-tone=success]{background:color-mix(in srgb,#16a34a 14%,var(--background, #fff));border-color:color-mix(in srgb,#16a34a 30%,transparent);color:#15803d}.endge-shadcn-badge[data-tone=warning]{background:color-mix(in srgb,#d97706 14%,var(--background, #fff));border-color:color-mix(in srgb,#d97706 30%,transparent);color:#b45309}.endge-shadcn-badge[data-tone=danger],.endge-shadcn-badge[data-tone=error]{background:color-mix(in srgb,var(--destructive, #dc2626) 14%,var(--background, #fff));border-color:color-mix(in srgb,var(--destructive, #dc2626) 30%,transparent);color:var(--destructive, #dc2626)}.endge-shadcn-dot{background:var(--primary, #18181b);border:2px solid color-mix(in srgb,var(--primary, #18181b) 16%,var(--background, #fff));border-radius:999px;box-sizing:border-box;display:inline-block;flex:none}.endge-shadcn-dot[data-tone=success]{background:#16a34a}.endge-shadcn-dot[data-tone=warning]{background:#d97706}.endge-shadcn-dot[data-tone=danger],.endge-shadcn-dot[data-tone=error]{background:var(--destructive, #dc2626)}.endge-shadcn-divider{background:var(--border, #e4e4e7);flex:none}.endge-shadcn-divider[data-orientation=horizontal]{height:1px;width:100%}.endge-shadcn-divider[data-orientation=vertical]{align-self:stretch;min-height:1rem;width:1px}.endge-shadcn-input,.endge-shadcn-textarea,.endge-shadcn-select{background:var(--background, #fff);border:1px solid var(--input, var(--border, #d4d4d8));border-radius:var(--radius, .625rem);color:var(--foreground, #18181b);font-size:.875rem;outline:none;transition:border-color .14s ease,box-shadow .14s ease,background-color .14s ease}.endge-shadcn-input{height:2.25rem;min-width:10rem;padding:0 .75rem}.endge-shadcn-sfc-table{container-type:inline-size}.endge-shadcn-table{background:var(--background, #fff);color:var(--foreground, #18181b);display:flex;flex-direction:column;font:inherit;height:100%;min-height:0;width:100%}.endge-shadcn-table__toolbar{align-items:center;display:flex;flex:none;justify-content:space-between;min-height:2.75rem;padding:.35rem 0}.endge-shadcn-table__summary{align-items:baseline;color:var(--foreground, #18181b);display:inline-flex;font-size:.75rem;font-variant-numeric:tabular-nums;font-weight:650;gap:.3rem;letter-spacing:-.01em}.endge-shadcn-table__summary-label{color:var(--muted-foreground, #71717a);font-weight:450}.endge-shadcn-button{align-items:center;background:transparent;border:0;border-radius:calc(var(--radius, .625rem) - .125rem);color:var(--foreground, #18181b);cursor:pointer;display:inline-flex;font:inherit;font-size:.8125rem;font-weight:550;gap:.45rem;height:2rem;justify-content:center;outline:none;padding:0 .7rem;transition:background-color .12s ease,border-color .12s ease,box-shadow .12s ease}.endge-shadcn-button--outline{background:var(--background, #fff);border:1px solid var(--border, #e4e4e7);box-shadow:0 1px 2px color-mix(in srgb,var(--foreground, #18181b) 5%,transparent)}.endge-shadcn-button:hover{background:var(--accent, #f4f4f5)}.endge-shadcn-button:focus-visible{border-color:var(--ring, #a1a1aa);box-shadow:0 0 0 3px color-mix(in srgb,var(--ring, #a1a1aa) 25%,transparent)}.endge-shadcn-table__viewport{border:1px solid var(--border, #e4e4e7);border-radius:var(--radius, .625rem);flex:1 1 0%;min-height:0;overflow:auto;position:relative;scrollbar-color:var(--border, #e4e4e7) transparent;scrollbar-width:thin}.endge-shadcn-table__table{border-collapse:separate;border-spacing:0;caption-side:bottom;display:grid;font-size:.8125rem;min-width:100%}.endge-shadcn-table__header{background:color-mix(in srgb,var(--muted, #f4f4f5) 92%,var(--background, #fff));display:grid;position:sticky;top:0;z-index:5}.endge-shadcn-table__header>tr{display:flex;width:100%}.endge-shadcn-table__body{display:grid;position:relative;width:100%}.endge-shadcn-table__head{background:inherit;border-bottom:1px solid var(--border, #e4e4e7);color:var(--foreground, #18181b);height:2.5rem;padding:0;position:relative;text-align:left;vertical-align:middle}.endge-shadcn-table__head:not(:last-child),.endge-shadcn-table__cell:not(:last-child){border-right:1px solid color-mix(in srgb,var(--border, #e4e4e7) 72%,transparent)}.endge-shadcn-table__head--pinned{box-shadow:1px 0 0 var(--border, #e4e4e7);z-index:7!important}.endge-shadcn-table__sort{align-items:center;background:transparent;border:0;color:inherit;cursor:pointer;display:flex;font:inherit;font-weight:580;gap:.4rem;height:100%;min-width:0;outline:none;padding:0 .65rem;text-align:left;width:100%}.endge-shadcn-table__sort:disabled{cursor:default}.endge-shadcn-table__sort:not(:disabled):hover{background:color-mix(in srgb,var(--accent, #f4f4f5) 75%,transparent)}.endge-shadcn-table__sort:focus-visible{box-shadow:inset 0 0 0 2px var(--ring, #a1a1aa)}.endge-shadcn-table__head-title{display:block;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.endge-shadcn-table__sort-icon{align-items:center;color:var(--muted-foreground, #71717a);display:inline-flex;flex:none;position:relative}.endge-shadcn-table__sort--enabled .endge-shadcn-table__sort-icon{color:var(--foreground, #18181b)}.endge-shadcn-table__sort-index{align-items:center;background:var(--primary, #18181b);border-radius:999px;color:var(--primary-foreground, #fafafa);display:inline-flex;font-size:.5625rem;font-weight:700;height:.8rem;justify-content:center;min-width:.8rem;padding:0 .15rem;position:absolute;right:-.55rem;top:-.55rem}.endge-shadcn-table__resizer{cursor:col-resize;height:100%;position:absolute;right:-3px;top:0;touch-action:none;width:6px;z-index:10}.endge-shadcn-table__resizer:after{background:transparent;content:"";height:55%;position:absolute;right:2px;top:22.5%;transition:background-color .1s ease;width:1px}.endge-shadcn-table__resizer:hover:after,.endge-shadcn-table__resizer--active:after{background:var(--primary, #18181b)}.endge-shadcn-table__row{background:var(--background, #fff);transition:background-color 90ms ease;will-change:transform}.endge-shadcn-table__row:hover{background:var(--muted, #f4f4f5)}.endge-shadcn-table__row--selected{background:var(--accent, #e4e4e7)}.endge-shadcn-table__row:focus-visible{outline:2px solid var(--ring, #18181b);outline-offset:-2px}.endge-shadcn-table__cell{background:inherit;border-bottom:1px solid var(--border, #e4e4e7);box-sizing:border-box;height:var(--endge-table-row-size, 40px);overflow:hidden;padding:0 .65rem;text-overflow:ellipsis;vertical-align:middle;white-space:nowrap}.endge-shadcn-table__cell--pinned{box-shadow:1px 0 0 var(--border, #e4e4e7);z-index:3!important}.endge-shadcn-table__cell-content{height:100%;overflow:hidden}.endge-shadcn-table__empty{align-items:center;color:var(--muted-foreground, #71717a);display:flex;height:6rem;justify-content:center;padding:1rem;text-align:center;width:100%}.endge-shadcn-table__pagination{align-items:center;display:flex;flex:none;justify-content:flex-end;min-height:3.25rem;padding:.5rem .45rem 0}.endge-shadcn-table__pagination-controls,.endge-shadcn-table__page-size,.endge-shadcn-table__page-buttons{align-items:center;display:flex}.endge-shadcn-table__pagination-controls{gap:2rem}.endge-shadcn-table__page-size{color:var(--foreground, #18181b);font-size:.8125rem;font-weight:580;gap:.6rem;white-space:nowrap}.endge-shadcn-table__page-size-select{display:inline-grid;position:relative}.endge-shadcn-table__page-size-select:after{border-bottom:1.5px solid var(--muted-foreground, #71717a);border-right:1.5px solid var(--muted-foreground, #71717a);content:"";height:.36rem;pointer-events:none;position:absolute;right:.8rem;top:50%;transform:translateY(-70%) rotate(45deg);width:.36rem}.endge-shadcn-table__page-size select{appearance:none;background:var(--background, #fff);border:1px solid var(--border, #e4e4e7);border-radius:calc(var(--radius, .625rem) - .125rem);color:var(--foreground, #18181b);cursor:pointer;font:inherit;font-variant-numeric:tabular-nums;height:2.25rem;min-width:4.7rem;outline:none;padding:0 2.1rem 0 .75rem}.endge-shadcn-table__page-size select:focus-visible,.endge-shadcn-table__page-buttons button:focus-visible{border-color:var(--ring, #a1a1aa);box-shadow:0 0 0 3px color-mix(in srgb,var(--ring, #a1a1aa) 24%,transparent);position:relative;z-index:2}.endge-shadcn-table__page-label{font-size:.8125rem;font-variant-numeric:tabular-nums;font-weight:580;min-width:5.75rem;text-align:center;white-space:nowrap}.endge-shadcn-table__page-buttons{border:1px solid var(--border, #e4e4e7);border-radius:calc(var(--radius, .625rem) - .125rem);overflow:hidden}.endge-shadcn-table__page-buttons button{align-items:center;background:var(--background, #fff);border:0;color:var(--foreground, #18181b);cursor:pointer;display:inline-flex;height:2.25rem;justify-content:center;outline:none;padding:0;width:2.25rem}.endge-shadcn-table__page-buttons button+button{border-left:1px solid var(--border, #e4e4e7)}.endge-shadcn-table__page-buttons button:not(:disabled):hover{background:var(--accent, #f4f4f5)}.endge-shadcn-table__page-buttons button:disabled{color:var(--muted-foreground, #71717a);cursor:not-allowed;opacity:.48}@container (max-width: 620px){.endge-shadcn-table__pagination-controls{gap:.75rem}.endge-shadcn-table__page-size>span:first-child{display:none}}.endge-shadcn-table-column-manager{position:relative}.endge-shadcn-table-column-manager__popover{animation:endge-shadcn-select-in .12s ease-out;background:var(--popover, var(--background, #fff));border:1px solid var(--border, #e4e4e7);border-radius:var(--radius, .625rem);box-shadow:0 14px 40px color-mix(in srgb,var(--foreground, #18181b) 16%,transparent);color:var(--popover-foreground, var(--foreground, #18181b));max-height:min(31rem,70vh);min-width:17rem;overflow:auto;position:absolute;right:0;top:calc(100% + .35rem);z-index:50}.endge-shadcn-table-column-manager__section{padding:.45rem}.endge-shadcn-table-column-manager__label{color:var(--muted-foreground, #71717a);font-size:.6875rem;font-weight:650;letter-spacing:.045em;padding:.35rem .45rem;text-transform:uppercase}.endge-shadcn-table-column-manager__visibility,.endge-shadcn-table-column-manager__item{align-items:center;background:transparent;border:0;border-radius:calc(var(--radius, .625rem) - .25rem);color:inherit;display:flex;font:inherit;font-size:.8125rem;gap:.55rem;min-height:2rem;padding:.3rem .45rem;text-align:left;width:100%}.endge-shadcn-table-column-manager__visibility{cursor:pointer}.endge-shadcn-table-column-manager__visibility:hover,.endge-shadcn-table-column-manager__item:hover{background:var(--accent, #f4f4f5)}.endge-shadcn-table-column-manager__check{align-items:center;border:1px solid var(--input, #d4d4d8);border-radius:.25rem;display:inline-flex;flex:none;height:1rem;justify-content:center;width:1rem}.endge-shadcn-table-column-manager__check[data-checked]{background:var(--primary, #18181b);border-color:var(--primary, #18181b);color:var(--primary-foreground, #fff)}.endge-shadcn-table-column-manager__separator{background:var(--border, #e4e4e7);height:1px}.endge-shadcn-table-column-manager__drag{align-items:center;background:transparent;border:0;color:var(--muted-foreground, #71717a);cursor:grab;display:inline-flex;height:1.45rem;justify-content:center;padding:0;width:1.45rem}.endge-shadcn-table-column-manager__drag:active{cursor:grabbing}.endge-shadcn-table-column-manager__chosen{background:var(--accent, #f4f4f5)}.endge-shadcn-table-column-manager__ghost{opacity:.4}@container (max-width: 520px){.endge-shadcn-table__summary-label,.endge-shadcn-table-column-manager__trigger span{display:none}}.endge-shadcn-textarea{line-height:1.5;min-height:5.5rem;min-width:14rem;padding:.625rem .75rem;resize:vertical}.endge-shadcn-input::placeholder,.endge-shadcn-textarea::placeholder,.endge-shadcn-select:invalid{color:var(--muted-foreground, #71717a)}.endge-shadcn-input:focus-visible,.endge-shadcn-textarea:focus-visible,.endge-shadcn-select:focus-visible{border-color:var(--ring, var(--primary, #18181b));box-shadow:0 0 0 3px color-mix(in srgb,var(--ring, var(--primary, #18181b)) 18%,transparent)}.endge-shadcn-input:disabled,.endge-shadcn-textarea:disabled,.endge-shadcn-select:disabled,.endge-shadcn-checkbox:disabled{cursor:not-allowed;opacity:.5}.endge-shadcn-input[readonly],.endge-shadcn-textarea[readonly]{background:var(--muted, #f4f4f5)}.endge-shadcn-checkbox-field{align-items:center;color:var(--foreground, #18181b);cursor:pointer;display:inline-flex;gap:.625rem;line-height:1.25rem;-webkit-user-select:none;user-select:none}.endge-shadcn-checkbox{align-items:center;appearance:none;background:var(--background, #fff);border:1px solid var(--input, var(--border, #d4d4d8));border-radius:calc(var(--radius, .625rem) - .25rem);box-sizing:border-box;display:inline-flex;flex:none;height:1rem;justify-content:center;margin:0;outline:none;transition:background-color .14s ease,border-color .14s ease,box-shadow .14s ease;width:1rem}.endge-shadcn-checkbox:after{border-color:var(--primary-foreground, #fff);border-style:solid;border-width:0 1.5px 1.5px 0;content:"";display:none;height:.5rem;margin-top:-.1rem;transform:rotate(45deg);width:.25rem}.endge-shadcn-checkbox:checked{background:var(--primary, #18181b);border-color:var(--primary, #18181b)}.endge-shadcn-checkbox:checked:after{display:block}.endge-shadcn-checkbox:focus-visible{border-color:var(--ring, var(--primary, #18181b));box-shadow:0 0 0 3px color-mix(in srgb,var(--ring, var(--primary, #18181b)) 18%,transparent)}.endge-shadcn-checkbox-label{font-size:.875rem;font-weight:500}.endge-shadcn-select-field{display:inline-grid;min-width:12rem;position:relative}.endge-shadcn-select-field:not([data-multiple]):after{border-bottom:1.5px solid var(--muted-foreground, #71717a);border-right:1.5px solid var(--muted-foreground, #71717a);content:"";height:.4rem;pointer-events:none;position:absolute;right:.9rem;top:50%;transform:translateY(-65%) rotate(45deg);width:.4rem}.endge-shadcn-select{appearance:none;height:2.5rem;padding:0 2.5rem 0 .75rem;width:100%}.endge-shadcn-multiselect-trigger{align-items:center;cursor:pointer;display:flex;font-weight:400;gap:.5rem;justify-content:space-between;text-align:left}.endge-shadcn-select-field[data-open] .endge-shadcn-multiselect-trigger{border-color:var(--ring, var(--primary, #18181b));box-shadow:0 0 0 3px color-mix(in srgb,var(--ring, var(--primary, #18181b)) 18%,transparent)}.endge-shadcn-multiselect-value{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.endge-shadcn-multiselect-value[data-placeholder]{color:var(--muted-foreground, #71717a)}.endge-shadcn-multiselect-count{align-items:center;background:var(--secondary, #f4f4f5);border:1px solid var(--border, #e4e4e7);border-radius:999px;color:var(--secondary-foreground, #27272a);display:inline-flex;flex:none;font-size:.6875rem;font-variant-numeric:tabular-nums;font-weight:600;height:1.25rem;justify-content:center;min-width:1.25rem;padding:0 .3rem}.endge-shadcn-select-chevron{border-bottom:1.5px solid var(--muted-foreground, #71717a);border-right:1.5px solid var(--muted-foreground, #71717a);flex:none;height:.4rem;margin:-.2rem .1rem 0 .25rem;transform:rotate(45deg);transition:transform .14s ease,margin .14s ease;width:.4rem}.endge-shadcn-select-field[data-open] .endge-shadcn-select-chevron{margin-top:.2rem;transform:rotate(225deg)}.endge-shadcn-multiselect-content{animation:endge-shadcn-select-in .12s ease-out;background:var(--popover, var(--background, #fff));border:1px solid var(--border, #e4e4e7);border-radius:var(--radius, .625rem);box-shadow:0 12px 32px color-mix(in srgb,var(--foreground, #18181b) 14%,transparent);display:grid;gap:.125rem;left:0;margin-top:.375rem;max-height:15rem;min-width:100%;overflow-y:auto;padding:.25rem;position:absolute;top:100%;z-index:50}.endge-shadcn-multiselect-option{align-items:center;background:transparent;border:0;border-radius:calc(var(--radius, .625rem) - .25rem);color:var(--popover-foreground, var(--foreground, #18181b));cursor:pointer;display:flex;font:inherit;font-size:.875rem;gap:.625rem;line-height:1.25rem;min-height:2.25rem;outline:none;padding:.45rem .55rem;text-align:left;width:100%}.endge-shadcn-multiselect-option:hover,.endge-shadcn-multiselect-option:focus-visible{background:var(--accent, #f4f4f5);color:var(--accent-foreground, #18181b)}.endge-shadcn-multiselect-check{align-items:center;border:1px solid var(--input, var(--border, #d4d4d8));border-radius:calc(var(--radius, .625rem) - .35rem);display:inline-flex;flex:none;height:1rem;justify-content:center;width:1rem}.endge-shadcn-multiselect-option[aria-selected=true] .endge-shadcn-multiselect-check{background:var(--primary, #18181b);border-color:var(--primary, #18181b)}.endge-shadcn-multiselect-option[aria-selected=true] .endge-shadcn-multiselect-check:after{border-color:var(--primary-foreground, #fff);border-style:solid;border-width:0 1.5px 1.5px 0;content:"";height:.48rem;margin-top:-.1rem;transform:rotate(45deg);width:.24rem}.endge-shadcn-multiselect-option-label{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.endge-shadcn-multiselect-empty{color:var(--muted-foreground, #71717a);font-size:.8125rem;padding:.75rem;text-align:center}.endge-shadcn-multiselect-native{height:1px;opacity:0;overflow:hidden;pointer-events:none;position:absolute;width:1px}.endge-shadcn-menu-root{animation:endge-shadcn-menu-in .11s ease-out;background:var(--popover, var(--background, #fff));border:1px solid var(--border, #e4e4e7);border-radius:calc(var(--radius, .625rem) - .125rem);box-shadow:0 10px 28px color-mix(in srgb,var(--foreground, #18181b) 16%,transparent);color:var(--popover-foreground, var(--foreground, #18181b));min-width:9.75rem;padding:.25rem;position:fixed;z-index:10050}.endge-shadcn-menu-root__item{align-items:center;background:transparent;border:0;border-radius:calc(var(--radius, .625rem) - .25rem);color:inherit;cursor:default;display:flex;font:inherit;font-size:.8125rem;gap:.5rem;min-height:2rem;outline:none;padding:.375rem .5rem;text-align:left;width:100%}.endge-shadcn-menu-root__item:hover,.endge-shadcn-menu-root__item:focus-visible{background:var(--accent, #f4f4f5);color:var(--accent-foreground, var(--foreground, #18181b))}.endge-shadcn-menu-root__icon{color:color-mix(in srgb,var(--muted-foreground, #71717a) 78%,transparent);flex:none}.endge-shadcn-menu-root__separator{background:var(--border, #e4e4e7);height:1px;margin:.25rem -.25rem}@keyframes endge-shadcn-menu-in{0%{opacity:0;transform:translateY(-.2rem) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes endge-shadcn-select-in{0%{opacity:0;transform:translateY(-.25rem) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}.endge-shadcn-filter-field[data-v-2b62c559]{display:grid;flex:0 1 16rem;gap:.35rem;min-width:12rem}.endge-shadcn-filter-field__label[data-v-2b62c559]{color:var(--muted-foreground, #64748b);font-size:.75rem}.endge-shadcn-filter-field__error[data-v-2b62c559]{color:var(--destructive, #ef4444)}.endge-shadcn-filter-field[data-loading][data-v-2b62c559]{opacity:.72}.endge-shadcn-filter-renderer[data-v-e89e5e0a]{align-items:end;display:flex;flex-wrap:wrap;gap:.75rem;min-width:0}.endge-shadcn-filter-renderer__unsupported[data-v-e89e5e0a]{color:var(--muted-foreground, #64748b);font-size:.875rem}
|