@toolbox-web/grid-vue 0.0.0 → 0.1.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.
Files changed (140) hide show
  1. package/README.md +489 -1
  2. package/chunks/feature-registry-BgEOysSJ.js +38 -0
  3. package/chunks/feature-registry-BgEOysSJ.js.map +1 -0
  4. package/features/clipboard.d.ts +20 -0
  5. package/features/clipboard.d.ts.map +1 -0
  6. package/features/clipboard.js +4 -0
  7. package/features/clipboard.js.map +1 -0
  8. package/features/column-virtualization.d.ts +20 -0
  9. package/features/column-virtualization.d.ts.map +1 -0
  10. package/features/column-virtualization.js +4 -0
  11. package/features/column-virtualization.js.map +1 -0
  12. package/features/context-menu.d.ts +20 -0
  13. package/features/context-menu.d.ts.map +1 -0
  14. package/features/context-menu.js +4 -0
  15. package/features/context-menu.js.map +1 -0
  16. package/features/editing.d.ts +20 -0
  17. package/features/editing.d.ts.map +1 -0
  18. package/features/editing.js +4 -0
  19. package/features/editing.js.map +1 -0
  20. package/features/export.d.ts +20 -0
  21. package/features/export.d.ts.map +1 -0
  22. package/features/export.js +4 -0
  23. package/features/export.js.map +1 -0
  24. package/features/filtering.d.ts +20 -0
  25. package/features/filtering.d.ts.map +1 -0
  26. package/features/filtering.js +4 -0
  27. package/features/filtering.js.map +1 -0
  28. package/features/grouping-columns.d.ts +24 -0
  29. package/features/grouping-columns.d.ts.map +1 -0
  30. package/features/grouping-columns.js +4 -0
  31. package/features/grouping-columns.js.map +1 -0
  32. package/features/grouping-rows.d.ts +23 -0
  33. package/features/grouping-rows.d.ts.map +1 -0
  34. package/features/grouping-rows.js +4 -0
  35. package/features/grouping-rows.js.map +1 -0
  36. package/features/index.d.ts +1 -0
  37. package/features/index.d.ts.map +1 -0
  38. package/features/index.js +23 -0
  39. package/features/index.js.map +1 -0
  40. package/features/master-detail.d.ts +23 -0
  41. package/features/master-detail.d.ts.map +1 -0
  42. package/features/master-detail.js +4 -0
  43. package/features/master-detail.js.map +1 -0
  44. package/features/multi-sort.d.ts +20 -0
  45. package/features/multi-sort.d.ts.map +1 -0
  46. package/features/multi-sort.js +5 -0
  47. package/features/multi-sort.js.map +1 -0
  48. package/features/pinned-columns.d.ts +23 -0
  49. package/features/pinned-columns.d.ts.map +1 -0
  50. package/features/pinned-columns.js +4 -0
  51. package/features/pinned-columns.js.map +1 -0
  52. package/features/pinned-rows.d.ts +22 -0
  53. package/features/pinned-rows.d.ts.map +1 -0
  54. package/features/pinned-rows.js +4 -0
  55. package/features/pinned-rows.js.map +1 -0
  56. package/features/pivot.d.ts +24 -0
  57. package/features/pivot.d.ts.map +1 -0
  58. package/features/pivot.js +4 -0
  59. package/features/pivot.js.map +1 -0
  60. package/features/print.d.ts +20 -0
  61. package/features/print.d.ts.map +1 -0
  62. package/features/print.js +4 -0
  63. package/features/print.js.map +1 -0
  64. package/features/reorder.d.ts +20 -0
  65. package/features/reorder.d.ts.map +1 -0
  66. package/features/reorder.js +4 -0
  67. package/features/reorder.js.map +1 -0
  68. package/features/responsive.d.ts +24 -0
  69. package/features/responsive.d.ts.map +1 -0
  70. package/features/responsive.js +4 -0
  71. package/features/responsive.js.map +1 -0
  72. package/features/row-reorder.d.ts +20 -0
  73. package/features/row-reorder.d.ts.map +1 -0
  74. package/features/row-reorder.js +4 -0
  75. package/features/row-reorder.js.map +1 -0
  76. package/features/selection.d.ts +20 -0
  77. package/features/selection.d.ts.map +1 -0
  78. package/features/selection.js +4 -0
  79. package/features/selection.js.map +1 -0
  80. package/features/server-side.d.ts +22 -0
  81. package/features/server-side.d.ts.map +1 -0
  82. package/features/server-side.js +4 -0
  83. package/features/server-side.js.map +1 -0
  84. package/features/tree.d.ts +23 -0
  85. package/features/tree.d.ts.map +1 -0
  86. package/features/tree.js +4 -0
  87. package/features/tree.js.map +1 -0
  88. package/features/undo-redo.d.ts +20 -0
  89. package/features/undo-redo.d.ts.map +1 -0
  90. package/features/undo-redo.js +4 -0
  91. package/features/undo-redo.js.map +1 -0
  92. package/features/visibility.d.ts +20 -0
  93. package/features/visibility.d.ts.map +1 -0
  94. package/features/visibility.js +4 -0
  95. package/features/visibility.js.map +1 -0
  96. package/index.d.ts +67 -0
  97. package/index.d.ts.map +1 -0
  98. package/index.js +673 -0
  99. package/index.js.map +1 -0
  100. package/lib/TbwGrid.vue.d.ts +98 -0
  101. package/lib/TbwGrid.vue.d.ts.map +1 -0
  102. package/lib/TbwGridColumn.vue.d.ts +183 -0
  103. package/lib/TbwGridColumn.vue.d.ts.map +1 -0
  104. package/lib/TbwGridDetailPanel.vue.d.ts +36 -0
  105. package/lib/TbwGridDetailPanel.vue.d.ts.map +1 -0
  106. package/lib/TbwGridResponsiveCard.vue.d.ts +22 -0
  107. package/lib/TbwGridResponsiveCard.vue.d.ts.map +1 -0
  108. package/lib/TbwGridToolButtons.vue.d.ts +27 -0
  109. package/lib/TbwGridToolButtons.vue.d.ts.map +1 -0
  110. package/lib/TbwGridToolPanel.vue.d.ts +178 -0
  111. package/lib/TbwGridToolPanel.vue.d.ts.map +1 -0
  112. package/lib/detail-panel-registry.d.ts +20 -0
  113. package/lib/detail-panel-registry.d.ts.map +1 -0
  114. package/lib/feature-props.d.ts +317 -0
  115. package/lib/feature-props.d.ts.map +1 -0
  116. package/lib/feature-registry.d.ts +69 -0
  117. package/lib/feature-registry.d.ts.map +1 -0
  118. package/lib/grid-icon-registry.d.ts +66 -0
  119. package/lib/grid-icon-registry.d.ts.map +1 -0
  120. package/lib/grid-provider.d.ts +66 -0
  121. package/lib/grid-provider.d.ts.map +1 -0
  122. package/lib/grid-type-registry.d.ts +98 -0
  123. package/lib/grid-type-registry.d.ts.map +1 -0
  124. package/lib/responsive-card-registry.d.ts +20 -0
  125. package/lib/responsive-card-registry.d.ts.map +1 -0
  126. package/lib/slot-types.d.ts +50 -0
  127. package/lib/slot-types.d.ts.map +1 -0
  128. package/lib/tool-panel-registry.d.ts +18 -0
  129. package/lib/tool-panel-registry.d.ts.map +1 -0
  130. package/lib/use-grid-event.d.ts +68 -0
  131. package/lib/use-grid-event.d.ts.map +1 -0
  132. package/lib/use-grid.d.ts +39 -0
  133. package/lib/use-grid.d.ts.map +1 -0
  134. package/lib/vue-column-config.d.ts +69 -0
  135. package/lib/vue-column-config.d.ts.map +1 -0
  136. package/lib/vue-grid-adapter.d.ts +94 -0
  137. package/lib/vue-grid-adapter.d.ts.map +1 -0
  138. package/package.json +52 -3
  139. package/typedoc-entry.d.ts +31 -0
  140. package/typedoc-entry.d.ts.map +1 -0
package/index.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../libs/grid-vue/src/lib/grid-icon-registry.ts","../../../libs/grid-vue/src/lib/grid-type-registry.ts","../../../libs/grid-vue/src/lib/use-grid.ts","../../../libs/grid-vue/src/lib/detail-panel-registry.ts","../../../libs/grid-vue/src/lib/responsive-card-registry.ts","../../../libs/grid-vue/src/lib/vue-grid-adapter.ts","../../../libs/grid-vue/src/lib/TbwGrid.vue","../../../libs/grid-vue/src/lib/TbwGridColumn.vue","../../../libs/grid-vue/src/lib/TbwGridDetailPanel.vue","../../../libs/grid-vue/src/lib/TbwGridResponsiveCard.vue","../../../libs/grid-vue/src/lib/TbwGridToolButtons.vue","../../../libs/grid-vue/src/lib/tool-panel-registry.ts","../../../libs/grid-vue/src/lib/TbwGridToolPanel.vue","../../../libs/grid-vue/src/lib/use-grid-event.ts","../../../libs/grid-vue/src/lib/grid-provider.ts"],"sourcesContent":["/**\n * Icon registry for Vue applications.\n *\n * Provides application-wide icon overrides that all grids inherit\n * automatically via Vue's provide/inject.\n */\nimport type { GridIcons } from '@toolbox-web/grid';\nimport { defineComponent, inject, provide, type InjectionKey, type PropType } from 'vue';\n\n/**\n * Injection key for grid icons.\n */\nexport const GRID_ICONS: InjectionKey<Partial<GridIcons>> = Symbol('grid-icons');\n\n/**\n * Composable to get the current icon overrides from the nearest provider.\n *\n * @example\n * ```vue\n * <script setup>\n * import { useGridIcons } from '@toolbox-web/grid-vue';\n *\n * const icons = useGridIcons();\n * </script>\n * ```\n */\nexport function useGridIcons(): Partial<GridIcons> | undefined {\n return inject(GRID_ICONS, undefined);\n}\n\n/**\n * Provides application-wide icon overrides for all descendant grids.\n *\n * Wrap your application (or part of it) with this provider to customize\n * icons used by all TbwGrid components.\n *\n * @example\n * ```vue\n * <script setup>\n * import { GridIconProvider } from '@toolbox-web/grid-vue';\n *\n * const icons = {\n * sortAsc: '↑',\n * sortDesc: '↓',\n * expand: '+',\n * collapse: '−',\n * };\n * </script>\n *\n * <template>\n * <GridIconProvider :icons=\"icons\">\n * <App />\n * </GridIconProvider>\n * </template>\n * ```\n */\nexport const GridIconProvider = defineComponent({\n name: 'GridIconProvider',\n props: {\n /**\n * Icon overrides to provide to all descendant grids.\n */\n icons: {\n type: Object as PropType<Partial<GridIcons>>,\n required: true,\n },\n },\n setup(props, { slots }) {\n // Provide icons to descendants\n provide(GRID_ICONS, props.icons);\n\n // Render children\n return () => slots.default?.();\n },\n});\n\nexport type GridIconProviderProps = InstanceType<typeof GridIconProvider>['$props'];\n","/**\n * Type-level default registry for Vue applications.\n *\n * Provides application-wide type defaults for renderers and editors\n * that all grids inherit automatically via Vue's provide/inject.\n */\nimport type { CellRenderContext, ColumnEditorContext } from '@toolbox-web/grid';\nimport { defineComponent, inject, provide, type InjectionKey, type PropType, type VNode } from 'vue';\n\n/**\n * Vue-specific type default configuration.\n * Uses Vue render functions that receive the render context.\n */\nexport interface VueTypeDefault<TRow = unknown, TValue = unknown> {\n /** Vue render function for rendering cells of this type */\n renderer?: (ctx: CellRenderContext<TRow, TValue>) => VNode;\n /** Vue render function for editing cells of this type */\n editor?: (ctx: ColumnEditorContext<TRow, TValue>) => VNode;\n /** Default editorParams for this type */\n editorParams?: Record<string, unknown>;\n}\n\n/**\n * Type defaults registry - a map of type names to their defaults.\n */\nexport type TypeDefaultsMap = Record<string, VueTypeDefault>;\n\n/**\n * Injection key for type defaults.\n */\nexport const GRID_TYPE_DEFAULTS: InjectionKey<TypeDefaultsMap> = Symbol('grid-type-defaults');\n\n/**\n * Composable to get the current type defaults from the nearest provider.\n *\n * @example\n * ```vue\n * <script setup>\n * import { useGridTypeDefaults } from '@toolbox-web/grid-vue';\n *\n * const typeDefaults = useGridTypeDefaults();\n * </script>\n * ```\n */\nexport function useGridTypeDefaults(): TypeDefaultsMap | undefined {\n return inject(GRID_TYPE_DEFAULTS, undefined);\n}\n\n/**\n * Composable to get a specific type's default configuration.\n *\n * @param typeName - The type name to look up\n *\n * @example\n * ```vue\n * <script setup>\n * import { useTypeDefault } from '@toolbox-web/grid-vue';\n *\n * const countryDefault = useTypeDefault('country');\n * </script>\n * ```\n */\nexport function useTypeDefault<TRow = unknown, TValue = unknown>(\n typeName: string,\n): VueTypeDefault<TRow, TValue> | undefined {\n const defaults = useGridTypeDefaults();\n return defaults?.[typeName] as VueTypeDefault<TRow, TValue> | undefined;\n}\n\n/**\n * Provides application-wide type defaults for all descendant grids.\n *\n * Wrap your application (or part of it) with this provider to make\n * type-level renderers and editors available to all TbwGrid components.\n *\n * @example\n * ```vue\n * <script setup>\n * import { GridTypeProvider, type TypeDefaultsMap } from '@toolbox-web/grid-vue';\n * import { h } from 'vue';\n * import CountryBadge from './CountryBadge.vue';\n *\n * const typeDefaults: TypeDefaultsMap = {\n * country: {\n * renderer: (ctx) => h(CountryBadge, { code: ctx.value }),\n * },\n * };\n * </script>\n *\n * <template>\n * <GridTypeProvider :defaults=\"typeDefaults\">\n * <App />\n * </GridTypeProvider>\n * </template>\n * ```\n */\nexport const GridTypeProvider = defineComponent({\n name: 'GridTypeProvider',\n props: {\n /**\n * Type defaults to provide to all descendant grids.\n */\n defaults: {\n type: Object as PropType<TypeDefaultsMap>,\n required: true,\n },\n },\n setup(props, { slots }) {\n // Provide type defaults to descendants\n provide(GRID_TYPE_DEFAULTS, props.defaults);\n\n // Render children\n return () => slots.default?.();\n },\n});\n\nexport type GridTypeProviderProps = InstanceType<typeof GridTypeProvider>['$props'];\n","import type { DataGridElement } from '@toolbox-web/grid';\nimport { inject, ref, type InjectionKey, type Ref } from 'vue';\n\n/**\n * Injection key for the grid element.\n */\nexport const GRID_ELEMENT_KEY: InjectionKey<Ref<DataGridElement | null>> = Symbol('tbw-grid');\n\n/**\n * Return type for useGrid composable.\n */\nexport interface UseGridReturn {\n /** The grid element reference */\n gridElement: Ref<DataGridElement | null>;\n /** Force a layout recalculation */\n forceLayout: () => Promise<void>;\n /** Get current grid configuration */\n getConfig: () => ReturnType<DataGridElement['getConfig']> | undefined;\n /** Wait for grid to be ready */\n ready: () => Promise<void>;\n /** Get a plugin by its class */\n getPlugin: <T>(pluginClass: new (...args: unknown[]) => T) => T | undefined;\n}\n\n/**\n * Composable for programmatic access to the grid.\n *\n * @example\n * ```vue\n * <script setup>\n * import { useGrid } from '@toolbox-web/grid-vue';\n *\n * const { forceLayout, getConfig } = useGrid();\n *\n * async function handleResize() {\n * await forceLayout();\n * }\n * </script>\n * ```\n */\nexport function useGrid(): UseGridReturn {\n const gridElement = inject(GRID_ELEMENT_KEY, ref(null));\n\n return {\n gridElement,\n forceLayout: async () => {\n await gridElement.value?.forceLayout();\n },\n getConfig: () => {\n return gridElement.value?.getConfig();\n },\n ready: async () => {\n await gridElement.value?.ready();\n },\n getPlugin: <T>(pluginClass: new (...args: unknown[]) => T) => {\n return gridElement.value?.getPlugin(pluginClass);\n },\n };\n}\n","/**\n * Registry for detail panel renderers.\n * @internal\n */\nimport type { VNode } from 'vue';\n\n/**\n * Context object passed to the detail panel slot.\n */\nexport interface DetailPanelContext<T = unknown> {\n /** The row data for this detail panel */\n row: T;\n /** The row index */\n rowIndex: number;\n}\n\n/**\n * Registry for detail renderers (per grid element)\n */\nexport const detailRegistry = new WeakMap<HTMLElement, (ctx: DetailPanelContext<unknown>) => VNode[] | undefined>();\n\n/**\n * Get the detail renderer for a grid element.\n * @internal\n */\nexport function getDetailRenderer(\n gridElement: HTMLElement,\n): ((ctx: DetailPanelContext<unknown>) => VNode[] | undefined) | undefined {\n const detailElement = gridElement.querySelector('tbw-grid-detail') as HTMLElement | null;\n if (detailElement) {\n return detailRegistry.get(detailElement);\n }\n return undefined;\n}\n","/**\n * Registry for responsive card renderers.\n * @internal\n */\nimport type { VNode } from 'vue';\n\n/**\n * Context object passed to the responsive card slot.\n */\nexport interface ResponsiveCardContext<T = unknown> {\n /** The row data */\n row: T;\n /** The row index */\n rowIndex: number;\n}\n\n/**\n * Registry for responsive card renderers (per element)\n */\nexport const cardRegistry = new WeakMap<HTMLElement, (ctx: ResponsiveCardContext<unknown>) => VNode[] | undefined>();\n\n/**\n * Get the responsive card renderer for a grid element.\n * @internal\n */\nexport function getResponsiveCardRenderer(\n gridElement: HTMLElement,\n): ((ctx: ResponsiveCardContext<unknown>) => VNode[] | undefined) | undefined {\n const cardElement = gridElement.querySelector('tbw-grid-responsive-card') as HTMLElement | null;\n if (cardElement) {\n return cardRegistry.get(cardElement);\n }\n return undefined;\n}\n","import type {\n CellRenderContext,\n ColumnEditorContext,\n ColumnEditorSpec,\n ColumnViewRenderer,\n FrameworkAdapter,\n} from '@toolbox-web/grid';\nimport { createApp, type App, type VNode } from 'vue';\nimport { detailRegistry, type DetailPanelContext } from './detail-panel-registry';\nimport { cardRegistry, type ResponsiveCardContext } from './responsive-card-registry';\n\n/**\n * Registry mapping column elements to their Vue render functions.\n * Each column element stores its renderer/editor functions here.\n */\ninterface ColumnRegistry {\n renderer?: (ctx: CellRenderContext<unknown, unknown>) => VNode;\n editor?: (ctx: ColumnEditorContext<unknown, unknown>) => VNode;\n}\n\nconst columnRegistries = new WeakMap<HTMLElement, ColumnRegistry>();\n\n// Secondary registry by field name to handle Vue component re-creation\nconst fieldRegistries = new Map<string, ColumnRegistry>();\n\n/**\n * Register a Vue cell renderer for a column element.\n * Called by TbwGridColumn when it has a #cell slot.\n */\nexport function registerColumnRenderer(\n element: HTMLElement,\n renderer: (ctx: CellRenderContext<unknown, unknown>) => VNode,\n): void {\n const field = element.getAttribute('field');\n\n const registry = columnRegistries.get(element) ?? {};\n registry.renderer = renderer;\n columnRegistries.set(element, registry);\n\n // Also register by field name for fallback lookup\n if (field) {\n const fieldRegistry = fieldRegistries.get(field) ?? {};\n fieldRegistry.renderer = renderer;\n fieldRegistries.set(field, fieldRegistry);\n }\n}\n\n/**\n * Register a Vue cell editor for a column element.\n * Called by TbwGridColumn when it has an #editor slot.\n */\nexport function registerColumnEditor(\n element: HTMLElement,\n editor: (ctx: ColumnEditorContext<unknown, unknown>) => VNode,\n): void {\n const field = element.getAttribute('field');\n const registry = columnRegistries.get(element) ?? {};\n registry.editor = editor;\n columnRegistries.set(element, registry);\n\n // Also register by field name for fallback lookup\n if (field) {\n const fieldRegistry = fieldRegistries.get(field) ?? {};\n fieldRegistry.editor = editor;\n fieldRegistries.set(field, fieldRegistry);\n }\n}\n\n/**\n * Get the renderer registered for a column element.\n * Falls back to field-based lookup if WeakMap lookup fails.\n */\nexport function getColumnRenderer(\n element: HTMLElement,\n): ((ctx: CellRenderContext<unknown, unknown>) => VNode) | undefined {\n let renderer = columnRegistries.get(element)?.renderer;\n\n // Fallback to field-based lookup for Vue component re-creation scenarios\n if (!renderer) {\n const field = element.getAttribute('field');\n if (field) {\n renderer = fieldRegistries.get(field)?.renderer;\n }\n }\n\n return renderer;\n}\n\n/**\n * Get the editor registered for a column element.\n * Falls back to field-based lookup if WeakMap lookup fails.\n */\nexport function getColumnEditor(\n element: HTMLElement,\n): ((ctx: ColumnEditorContext<unknown, unknown>) => VNode) | undefined {\n let editor = columnRegistries.get(element)?.editor;\n\n // Fallback to field-based lookup for Vue component re-creation scenarios\n if (!editor) {\n const field = element.getAttribute('field');\n if (field) {\n editor = fieldRegistries.get(field)?.editor;\n }\n }\n\n return editor;\n}\n\n/**\n * Get all registered field names.\n * @internal - for testing only\n */\nexport function getRegisteredFields(): string[] {\n return Array.from(fieldRegistries.keys());\n}\n\n/**\n * Clear the field registries.\n * @internal - for testing only\n */\nexport function clearFieldRegistries(): void {\n fieldRegistries.clear();\n}\n\n/**\n * Tracks mounted Vue apps for cleanup.\n */\ninterface MountedView {\n app: App;\n container: HTMLElement;\n}\n\n/**\n * Cache for cell containers and their Vue apps.\n */\ninterface CellAppCache {\n app: App;\n container: HTMLElement;\n update: (ctx: CellRenderContext<unknown, unknown>) => void;\n}\n\n/**\n * Framework adapter that enables Vue 3 component integration\n * with the grid's light DOM configuration API.\n *\n * ## Usage\n *\n * The adapter is automatically registered when using the TbwGrid component.\n * For advanced use cases, you can manually register:\n *\n * ```ts\n * import { GridElement } from '@toolbox-web/grid';\n * import { VueGridAdapter } from '@toolbox-web/grid-vue';\n *\n * // One-time registration\n * GridElement.registerAdapter(new VueGridAdapter());\n * ```\n *\n * ## Declarative usage with TbwGrid:\n *\n * ```vue\n * <TbwGrid :rows=\"data\" :grid-config=\"config\">\n * <TbwGridColumn field=\"status\">\n * <template #cell=\"{ value, row }\">\n * <StatusBadge :value=\"value\" />\n * </template>\n * </TbwGridColumn>\n * </TbwGrid>\n * ```\n */\nexport class VueGridAdapter implements FrameworkAdapter {\n private mountedViews: MountedView[] = [];\n\n /**\n * Determines if this adapter can handle the given element.\n * Checks if a renderer or editor is registered for this element.\n */\n canHandle(element: HTMLElement): boolean {\n const field = element.getAttribute('field');\n let registry = columnRegistries.get(element);\n\n // If not found in WeakMap, try field-based lookup\n if (!registry && field) {\n const fieldRegistry = fieldRegistries.get(field);\n if (fieldRegistry && (fieldRegistry.renderer || fieldRegistry.editor)) {\n registry = fieldRegistry;\n columnRegistries.set(element, registry);\n }\n }\n\n const hasRenderer = registry?.renderer !== undefined;\n const hasEditor = registry?.editor !== undefined;\n return registry !== undefined && (hasRenderer || hasEditor);\n }\n\n /**\n * Creates a view renderer function that renders a Vue component\n * and returns its container DOM element.\n */\n createRenderer<TRow = unknown, TValue = unknown>(element: HTMLElement): ColumnViewRenderer<TRow, TValue> {\n const renderFn = getColumnRenderer(element);\n\n if (!renderFn) {\n return undefined as unknown as ColumnViewRenderer<TRow, TValue>;\n }\n\n // Cell cache for this field - maps cell element to its Vue app\n const cellCache = new WeakMap<HTMLElement, CellAppCache>();\n\n return (ctx: CellRenderContext<TRow, TValue>) => {\n const cellEl = (ctx as any).cellEl as HTMLElement | undefined;\n\n if (cellEl) {\n // Check if we have a cached app for this cell\n const cached = cellCache.get(cellEl);\n if (cached) {\n // Update the existing app with new context\n cached.update(ctx as CellRenderContext<unknown, unknown>);\n return cached.container;\n }\n\n // Create new container and Vue app for this cell\n const container = document.createElement('div');\n container.className = 'vue-cell-renderer';\n container.style.display = 'contents';\n\n // Create reactive context that can be updated\n let currentCtx = ctx as CellRenderContext<unknown, unknown>;\n\n const app = createApp({\n render() {\n return renderFn(currentCtx);\n },\n });\n\n app.mount(container);\n\n // Store in cache with update function\n cellCache.set(cellEl, {\n app,\n container,\n update: (newCtx) => {\n currentCtx = newCtx;\n // Force re-render\n app._instance?.update();\n },\n });\n\n return container;\n }\n\n // Fallback: create container without caching\n const container = document.createElement('div');\n container.className = 'vue-cell-renderer';\n container.style.display = 'contents';\n\n const app = createApp({\n render() {\n return renderFn(ctx as CellRenderContext<unknown, unknown>);\n },\n });\n\n app.mount(container);\n this.mountedViews.push({ app, container });\n\n return container;\n };\n }\n\n /**\n * Creates an editor spec that renders a Vue component for cell editing.\n * Returns a function that creates the editor DOM element.\n */\n createEditor<TRow = unknown, TValue = unknown>(element: HTMLElement): ColumnEditorSpec<TRow, TValue> {\n const editorFn = getColumnEditor(element);\n\n if (!editorFn) {\n return undefined as unknown as ColumnEditorSpec<TRow, TValue>;\n }\n\n // Return a function that creates the editor element\n return (ctx: ColumnEditorContext<TRow, TValue>): HTMLElement => {\n const container = document.createElement('div');\n container.className = 'vue-cell-editor';\n container.style.display = 'contents';\n\n const app = createApp({\n render() {\n return editorFn(ctx as ColumnEditorContext<unknown, unknown>);\n },\n });\n\n app.mount(container);\n this.mountedViews.push({ app, container });\n\n return container;\n };\n }\n\n /**\n * Framework adapter hook called by MasterDetailPlugin during attach().\n * Parses the <tbw-grid-detail> element and returns a Vue-based renderer.\n */\n parseDetailElement<TRow = unknown>(\n detailElement: Element,\n ): ((row: TRow, rowIndex: number) => HTMLElement) | undefined {\n const gridElement = detailElement.closest('tbw-grid') as HTMLElement | null;\n if (!gridElement) return undefined;\n\n // Get renderer from registry (registered by TbwGridDetailPanel)\n const detailEl = gridElement.querySelector('tbw-grid-detail') as HTMLElement | null;\n if (!detailEl) return undefined;\n\n const renderFn = detailRegistry.get(detailEl);\n if (!renderFn) return undefined;\n\n return (row: TRow, rowIndex: number): HTMLElement => {\n const container = document.createElement('div');\n container.className = 'vue-detail-panel';\n\n const ctx: DetailPanelContext<TRow> = { row, rowIndex };\n const vnodes = renderFn(ctx as DetailPanelContext<unknown>);\n\n if (vnodes && vnodes.length > 0) {\n // Render VNodes into container\n const app = createApp({\n render() {\n return vnodes;\n },\n });\n app.mount(container);\n this.mountedViews.push({ app, container });\n }\n\n return container;\n };\n }\n\n /**\n * Framework adapter hook called by ResponsivePlugin during attach().\n * Parses the <tbw-grid-responsive-card> element and returns a Vue-based renderer.\n */\n parseResponsiveCardElement<TRow = unknown>(\n cardElement: Element,\n ): ((row: TRow, rowIndex: number) => HTMLElement) | undefined {\n const gridElement = cardElement.closest('tbw-grid') as HTMLElement | null;\n if (!gridElement) return undefined;\n\n // Get renderer from registry (registered by TbwGridResponsiveCard)\n const cardEl = gridElement.querySelector('tbw-grid-responsive-card') as HTMLElement | null;\n if (!cardEl) return undefined;\n\n const renderFn = cardRegistry.get(cardEl);\n if (!renderFn) return undefined;\n\n return (row: TRow, rowIndex: number): HTMLElement => {\n const container = document.createElement('div');\n container.className = 'vue-responsive-card';\n\n const ctx: ResponsiveCardContext<TRow> = { row, rowIndex };\n const vnodes = renderFn(ctx as ResponsiveCardContext<unknown>);\n\n if (vnodes && vnodes.length > 0) {\n // Render VNodes into container\n const app = createApp({\n render() {\n return vnodes;\n },\n });\n app.mount(container);\n this.mountedViews.push({ app, container });\n }\n\n return container;\n };\n }\n\n /**\n * Cleanup all mounted Vue apps.\n */\n cleanup(): void {\n for (const { app, container } of this.mountedViews) {\n try {\n app.unmount();\n container.remove();\n } catch {\n // Ignore cleanup errors\n }\n }\n this.mountedViews = [];\n }\n}\n","<script setup lang=\"ts\" generic=\"TRow = unknown\">\nimport type { BaseGridPlugin, ColumnConfig, DataGridElement, FitMode, GridConfig } from '@toolbox-web/grid';\nimport type {\n ClipboardConfig,\n ColumnVirtualizationConfig,\n ContextMenuConfig,\n ExportConfig,\n FilterConfig,\n GroupingColumnsConfig,\n GroupingRowsConfig,\n MasterDetailConfig,\n MultiSortConfig,\n PinnedRowsConfig,\n PivotConfig,\n PrintConfig,\n ReorderConfig,\n ResponsivePluginConfig,\n RowReorderConfig,\n SelectionConfig,\n ServerSideConfig,\n TreeConfig,\n UndoRedoConfig,\n VisibilityConfig,\n} from '@toolbox-web/grid/all';\nimport { DataGridElement as GridElement } from '@toolbox-web/grid';\nimport { computed, onBeforeUnmount, onMounted, provide, ref, watch, type PropType } from 'vue';\nimport { createPluginFromFeature, type FeatureName } from './feature-registry';\nimport { useGridIcons } from './grid-icon-registry';\nimport { useGridTypeDefaults } from './grid-type-registry';\nimport { GRID_ELEMENT_KEY } from './use-grid';\nimport { VueGridAdapter } from './vue-grid-adapter';\n\n// Track if adapter is registered\nlet adapterRegistered = false;\nlet globalAdapter: VueGridAdapter | null = null;\n\n/**\n * Ensure the Vue adapter is registered globally.\n */\nfunction ensureAdapterRegistered(): VueGridAdapter {\n if (!adapterRegistered) {\n globalAdapter = new VueGridAdapter();\n GridElement.registerAdapter(globalAdapter);\n adapterRegistered = true;\n }\n return globalAdapter as VueGridAdapter;\n}\n\n// Register adapter at module load\nensureAdapterRegistered();\n\n/**\n * Props for TbwGrid component\n */\nconst props = defineProps({\n /** Row data to display */\n rows: {\n type: Array as PropType<TRow[]>,\n default: () => [],\n },\n /** Column definitions (shorthand for gridConfig.columns) */\n columns: {\n type: Array as PropType<ColumnConfig<TRow>[]>,\n default: undefined,\n },\n /** Full grid configuration */\n gridConfig: {\n type: Object as PropType<GridConfig<TRow>>,\n default: undefined,\n },\n /** Fit mode shorthand */\n fitMode: {\n type: String as PropType<FitMode>,\n default: undefined,\n },\n\n // ═══════════════════════════════════════════════════════════════════\n // FEATURE PROPS - Declarative plugin configuration\n // ═══════════════════════════════════════════════════════════════════\n\n /** Enable cell/row/range selection */\n selection: {\n type: [String, Object] as PropType<'cell' | 'row' | 'range' | SelectionConfig<TRow>>,\n default: undefined,\n },\n /** Enable inline cell editing */\n editing: {\n type: [Boolean, String] as PropType<boolean | 'click' | 'dblclick' | 'manual'>,\n default: undefined,\n },\n /** Enable clipboard copy/paste */\n clipboard: {\n type: [Boolean, Object] as PropType<boolean | ClipboardConfig>,\n default: undefined,\n },\n /** Enable right-click context menu */\n contextMenu: {\n type: [Boolean, Object] as PropType<boolean | ContextMenuConfig>,\n default: undefined,\n },\n /** Enable multi-column sorting */\n multiSort: {\n type: [Boolean, String, Object] as PropType<boolean | 'single' | 'multi' | MultiSortConfig>,\n default: undefined,\n },\n /** @deprecated Use multiSort instead */\n sorting: {\n type: [Boolean, String, Object] as PropType<boolean | 'single' | 'multi' | MultiSortConfig>,\n default: undefined,\n },\n /** Enable column filtering */\n filtering: {\n type: [Boolean, Object] as PropType<boolean | FilterConfig<TRow>>,\n default: undefined,\n },\n /** Enable column drag-to-reorder */\n reorder: {\n type: [Boolean, Object] as PropType<boolean | ReorderConfig>,\n default: undefined,\n },\n /** Enable column visibility toggle panel */\n visibility: {\n type: [Boolean, Object] as PropType<boolean | VisibilityConfig>,\n default: undefined,\n },\n /** Enable pinned/sticky columns */\n pinnedColumns: {\n type: Boolean as PropType<boolean>,\n default: undefined,\n },\n /** Enable multi-level column headers */\n groupingColumns: {\n type: [Boolean, Object] as PropType<boolean | GroupingColumnsConfig>,\n default: undefined,\n },\n /** Enable horizontal column virtualization */\n columnVirtualization: {\n type: [Boolean, Object] as PropType<boolean | ColumnVirtualizationConfig>,\n default: undefined,\n },\n /** Enable row drag-to-reorder */\n rowReorder: {\n type: [Boolean, Object] as PropType<boolean | RowReorderConfig>,\n default: undefined,\n },\n /** Enable row grouping by field values */\n groupingRows: {\n type: Object as PropType<GroupingRowsConfig>,\n default: undefined,\n },\n /** Enable pinned rows */\n pinnedRows: {\n type: [Boolean, Object] as PropType<boolean | PinnedRowsConfig>,\n default: undefined,\n },\n /** Enable hierarchical tree view */\n tree: {\n type: [Boolean, Object] as PropType<boolean | TreeConfig>,\n default: undefined,\n },\n /** Enable master-detail expandable rows */\n masterDetail: {\n type: Object as PropType<MasterDetailConfig>,\n default: undefined,\n },\n /** Enable responsive card layout */\n responsive: {\n type: [Boolean, Object] as PropType<boolean | ResponsivePluginConfig>,\n default: undefined,\n },\n /** Enable undo/redo for cell edits */\n undoRedo: {\n type: [Boolean, Object] as PropType<boolean | UndoRedoConfig>,\n default: undefined,\n },\n /** Enable CSV/JSON export */\n export: {\n type: [Boolean, Object] as PropType<boolean | ExportConfig>,\n default: undefined,\n },\n /** Enable print functionality */\n print: {\n type: [Boolean, Object] as PropType<boolean | PrintConfig>,\n default: undefined,\n },\n /** Enable pivot table functionality */\n pivot: {\n type: Object as PropType<PivotConfig>,\n default: undefined,\n },\n /** Enable server-side data operations */\n serverSide: {\n type: Object as PropType<ServerSideConfig>,\n default: undefined,\n },\n});\n\n/**\n * Emits for TbwGrid\n */\nconst emit = defineEmits<{\n /** Emitted when a cell value is committed */\n (e: 'cell-commit', event: CustomEvent): void;\n /** Emitted when a row's values are committed */\n (e: 'row-commit', event: CustomEvent): void;\n /** Emitted when a cell is clicked */\n (e: 'cell-click', event: CustomEvent): void;\n /** Emitted when a cell is double-clicked */\n (e: 'cell-dblclick', event: CustomEvent): void;\n /** Emitted when selection changes */\n (e: 'selection-change', event: CustomEvent): void;\n /** Emitted when a row is expanded/collapsed */\n (e: 'row-toggle', event: CustomEvent): void;\n /** Emitted when sorting changes */\n (e: 'sort-change', event: CustomEvent): void;\n /** Emitted when the grid is ready */\n (e: 'ready', event: CustomEvent): void;\n}>();\n\n// Template ref for the grid element\nconst gridRef = ref<DataGridElement<TRow> | null>(null);\n\n// Provide grid element to descendants (for useGrid composable)\nprovide(GRID_ELEMENT_KEY, gridRef);\n\n// Get type defaults and icons from providers\nconst typeDefaults = useGridTypeDefaults();\nconst iconOverrides = useGridIcons();\n\n// Feature prop names for creating plugins\nconst FEATURE_PROPS: FeatureName[] = [\n 'selection',\n 'editing',\n 'clipboard',\n 'contextMenu',\n 'multiSort',\n 'sorting',\n 'filtering',\n 'reorder',\n 'visibility',\n 'pinnedColumns',\n 'groupingColumns',\n 'columnVirtualization',\n 'rowReorder',\n 'groupingRows',\n 'pinnedRows',\n 'tree',\n 'masterDetail',\n 'responsive',\n 'undoRedo',\n 'export',\n 'print',\n 'pivot',\n 'serverSide',\n];\n\n/**\n * Create plugins from feature props.\n */\nfunction createFeaturePlugins(): BaseGridPlugin[] {\n const plugins: BaseGridPlugin[] = [];\n\n for (const feature of FEATURE_PROPS) {\n const propValue = props[feature as keyof typeof props];\n if (propValue !== undefined) {\n const plugin = createPluginFromFeature(feature, propValue);\n if (plugin) {\n plugins.push(plugin as BaseGridPlugin);\n }\n }\n }\n\n return plugins;\n}\n\n// Merged config with feature plugins\nconst mergedConfig = computed<GridConfig<TRow> | undefined>(() => {\n const baseConfig = props.gridConfig ?? {};\n const featurePlugins = createFeaturePlugins();\n const configPlugins = (baseConfig.plugins as BaseGridPlugin[]) ?? [];\n\n // Merge: feature plugins first, then config plugins\n const mergedPlugins = [...featurePlugins, ...configPlugins];\n\n // Apply type defaults if provided\n const typeDefaults$ = typeDefaults;\n\n // Apply icon overrides if provided\n const icons = iconOverrides ? { ...baseConfig.icons, ...iconOverrides } : baseConfig.icons;\n\n return {\n ...baseConfig,\n ...(props.columns ? { columns: props.columns } : {}),\n ...(mergedPlugins.length > 0 ? { plugins: mergedPlugins } : {}),\n ...(icons ? { icons } : {}),\n } as GridConfig<TRow>;\n});\n\n// Event handlers\nfunction handleCellCommit(event: Event) {\n emit('cell-commit', event as CustomEvent);\n}\n\nfunction handleRowCommit(event: Event) {\n emit('row-commit', event as CustomEvent);\n}\n\nfunction handleCellClick(event: Event) {\n emit('cell-click', event as CustomEvent);\n}\n\nfunction handleCellDblclick(event: Event) {\n emit('cell-dblclick', event as CustomEvent);\n}\n\nfunction handleSelectionChange(event: Event) {\n emit('selection-change', event as CustomEvent);\n}\n\nfunction handleRowToggle(event: Event) {\n emit('row-toggle', event as CustomEvent);\n}\n\nfunction handleSortChange(event: Event) {\n emit('sort-change', event as CustomEvent);\n}\n\nfunction handleReady(event: Event) {\n emit('ready', event as CustomEvent);\n}\n\n// Setup and cleanup\nonMounted(() => {\n const grid = gridRef.value as unknown as HTMLElement & DataGridElement<TRow>;\n if (!grid) return;\n\n // Attach the framework adapter to the grid element\n // This enables MasterDetailPlugin and ResponsivePlugin to use Vue-based renderers\n const adapter = ensureAdapterRegistered();\n (grid as any).__frameworkAdapter = adapter;\n\n // Add event listeners\n grid.addEventListener('cell-commit', handleCellCommit);\n grid.addEventListener('row-commit', handleRowCommit);\n grid.addEventListener('cell-click', handleCellClick);\n grid.addEventListener('cell-dblclick', handleCellDblclick);\n grid.addEventListener('selection-change', handleSelectionChange);\n grid.addEventListener('row-toggle', handleRowToggle);\n grid.addEventListener('sort-change', handleSortChange);\n grid.addEventListener('ready', handleReady);\n\n // Set initial data\n if (props.rows.length > 0) {\n grid.rows = props.rows;\n }\n if (mergedConfig.value) {\n grid.gridConfig = mergedConfig.value;\n }\n if (props.fitMode) {\n grid.fitMode = props.fitMode;\n }\n});\n\nonBeforeUnmount(() => {\n const grid = gridRef.value as unknown as HTMLElement & DataGridElement<TRow>;\n if (!grid) return;\n\n // Remove event listeners\n grid.removeEventListener('cell-commit', handleCellCommit);\n grid.removeEventListener('row-commit', handleRowCommit);\n grid.removeEventListener('cell-click', handleCellClick);\n grid.removeEventListener('cell-dblclick', handleCellDblclick);\n grid.removeEventListener('selection-change', handleSelectionChange);\n grid.removeEventListener('row-toggle', handleRowToggle);\n grid.removeEventListener('sort-change', handleSortChange);\n grid.removeEventListener('ready', handleReady);\n});\n\n// Watch for prop changes\nwatch(\n () => props.rows,\n (newRows) => {\n if (gridRef.value) {\n gridRef.value.rows = newRows;\n }\n },\n { deep: true },\n);\n\nwatch(\n mergedConfig,\n (newConfig) => {\n if (gridRef.value && newConfig) {\n gridRef.value.gridConfig = newConfig;\n }\n },\n { deep: true },\n);\n\nwatch(\n () => props.fitMode,\n (newFitMode) => {\n if (gridRef.value && newFitMode) {\n gridRef.value.fitMode = newFitMode;\n }\n },\n);\n\n// Expose the grid element for programmatic access\ndefineExpose({\n /** The underlying grid element */\n gridElement: gridRef,\n /** Force a layout recalculation */\n forceLayout: () => gridRef.value?.forceLayout(),\n /** Get current grid configuration */\n getConfig: () => gridRef.value?.getConfig(),\n /** Wait for grid to be ready */\n ready: () => gridRef.value?.ready(),\n});\n</script>\n\n<template>\n <tbw-grid ref=\"gridRef\">\n <slot></slot>\n </tbw-grid>\n</template>\n","<script setup lang=\"ts\">\nimport type { CellRenderContext, ColumnEditorContext } from '@toolbox-web/grid';\nimport { h, onMounted, ref, type VNode } from 'vue';\nimport { registerColumnEditor, registerColumnRenderer } from './vue-grid-adapter';\nimport type { CellSlotProps, EditorSlotProps } from './slot-types';\n\n/**\n * Props for TbwGridColumn\n */\nconst props = defineProps<{\n /** Field path in the row object */\n field: string;\n /** Column header text */\n header?: string;\n /** Column width */\n width?: string | number;\n /** Minimum column width */\n minWidth?: string | number;\n /** Maximum column width */\n maxWidth?: string | number;\n /** Whether the column is sortable */\n sortable?: boolean;\n /** Whether the column is resizable */\n resizable?: boolean;\n /** Whether the column is editable */\n editable?: boolean;\n /** Data type for the column */\n type?: string;\n /** Column alignment */\n align?: 'left' | 'center' | 'right';\n /** Whether the column is hidden */\n hidden?: boolean;\n}>();\n\n// Define slots with proper typing and get the slots object\nconst slots = defineSlots<{\n /** Custom cell renderer slot */\n cell?: (props: CellSlotProps) => VNode[];\n /** Custom cell editor slot */\n editor?: (props: EditorSlotProps) => VNode[];\n}>();\n\n// Template ref for the column element\nconst columnRef = ref<HTMLElement | null>(null);\n\nonMounted(() => {\n const element = columnRef.value;\n if (!element) return;\n\n // Check if cell slot exists by trying to access it\n const hasCellSlot = !!slots.cell;\n const hasEditorSlot = !!slots.editor;\n\n // Register renderer if #cell slot is provided\n if (hasCellSlot) {\n registerColumnRenderer(element, (ctx: CellRenderContext<unknown, unknown>) => {\n const slotFn = slots.cell;\n if (!slotFn) return h('span');\n const slotContent = slotFn({\n value: ctx.value,\n row: ctx.row,\n column: ctx.column,\n });\n // Return the VNode array wrapped in a div\n return h('div', { style: 'display: contents' }, slotContent);\n });\n }\n\n // Register editor if #editor slot is provided\n if (hasEditorSlot) {\n registerColumnEditor(element, (ctx: ColumnEditorContext<unknown, unknown>) => {\n const slotFn = slots.editor;\n if (!slotFn) return h('span');\n const slotContent = slotFn({\n value: ctx.value,\n row: ctx.row,\n column: ctx.column,\n commit: ctx.commit,\n cancel: ctx.cancel,\n });\n return h('div', { style: 'display: contents' }, slotContent);\n });\n }\n});\n</script>\n\n<template>\n <tbw-grid-column\n ref=\"columnRef\"\n :field=\"field\"\n :header=\"header\"\n :width=\"width\"\n :min-width=\"minWidth\"\n :max-width=\"maxWidth\"\n :sortable=\"sortable\"\n :resizable=\"resizable\"\n :editable=\"editable\"\n :type=\"type\"\n :align=\"align\"\n :hidden=\"hidden\"\n >\n <!-- Hidden slot to capture slot definitions -->\n </tbw-grid-column>\n</template>\n","<script setup lang=\"ts\" generic=\"TRow = unknown\">\nimport { onMounted, ref, useSlots, type VNode } from 'vue';\nimport { detailRegistry, type DetailPanelContext } from './detail-panel-registry';\n\n/**\n * Props for TbwGridDetailPanel\n */\nconst props = withDefaults(\n defineProps<{\n /**\n * Whether to show the expand/collapse column.\n * @default true\n */\n showExpandColumn?: boolean;\n\n /**\n * Animation style for expand/collapse.\n * - 'slide': Smooth height animation (default)\n * - 'fade': Opacity transition\n * - false: No animation\n * @default 'slide'\n */\n animation?: 'slide' | 'fade' | false;\n }>(),\n {\n showExpandColumn: true,\n animation: 'slide',\n },\n);\n\n// Define slots with proper typing\ndefineSlots<{\n /** Detail panel content slot */\n default?: (props: DetailPanelContext<TRow>) => VNode[];\n}>();\n\n// Template ref for the detail element\nconst detailRef = ref<HTMLElement | null>(null);\nconst slots = useSlots();\n\nonMounted(() => {\n const element = detailRef.value;\n if (!element || !slots.default) return;\n\n // Register the slot renderer\n detailRegistry.set(element, (ctx: DetailPanelContext<unknown>) => {\n return slots.default?.(ctx as DetailPanelContext<TRow>);\n });\n});\n</script>\n\n<template>\n <tbw-grid-detail ref=\"detailRef\" :show-expand-column=\"showExpandColumn\" :animation=\"animation\" />\n</template>\n","<script setup lang=\"ts\" generic=\"TRow = unknown\">\nimport { onMounted, ref, useSlots, type VNode } from 'vue';\nimport { cardRegistry, type ResponsiveCardContext } from './responsive-card-registry';\n\n/**\n * Props for TbwGridResponsiveCard\n */\nconst props = defineProps<{\n // Currently no additional props needed\n}>();\n\n// Define slots with proper typing\ndefineSlots<{\n /** Card content slot */\n default?: (props: ResponsiveCardContext<TRow>) => VNode[];\n}>();\n\n// Template ref for the card element\nconst cardRef = ref<HTMLElement | null>(null);\nconst slots = useSlots();\n\nonMounted(() => {\n const element = cardRef.value;\n if (!element || !slots.default) return;\n\n // Register the slot renderer\n cardRegistry.set(element, (ctx: ResponsiveCardContext<unknown>) => {\n return slots.default?.(ctx as ResponsiveCardContext<TRow>);\n });\n});\n</script>\n\n<template>\n <tbw-grid-responsive-card ref=\"cardRef\" />\n</template>\n","<script setup lang=\"ts\">\nimport { type VNode } from 'vue';\n\n/**\n * Props for TbwGridToolButtons\n */\ndefineProps<{\n // Currently no additional props needed\n}>();\n\n// Define slots with proper typing\ndefineSlots<{\n /** Tool button content slot */\n default?: () => VNode[];\n}>();\n</script>\n\n<template>\n <tbw-grid-tool-buttons>\n <slot />\n </tbw-grid-tool-buttons>\n</template>\n","/**\n * Registry for tool panel renderers.\n * @internal\n */\nimport type { VNode } from 'vue';\n\n/**\n * Context object passed to the tool panel slot.\n */\nexport interface ToolPanelContext {\n /** The grid element */\n gridElement: HTMLElement;\n}\n\n/**\n * Registry for tool panel renderers (per element)\n */\nexport const toolPanelRegistry = new WeakMap<HTMLElement, (ctx: ToolPanelContext) => VNode[] | undefined>();\n\n/**\n * Get the tool panel renderer for an element.\n * @internal\n */\nexport function getToolPanelRenderer(\n panelElement: HTMLElement,\n): ((ctx: ToolPanelContext) => VNode[] | undefined) | undefined {\n return toolPanelRegistry.get(panelElement);\n}\n","<script setup lang=\"ts\">\nimport { onMounted, ref, useSlots, type VNode } from 'vue';\nimport { toolPanelRegistry, type ToolPanelContext } from './tool-panel-registry';\n\n/**\n * Props for TbwGridToolPanel\n */\nconst props = withDefaults(\n defineProps<{\n /**\n * Unique identifier for this tool panel.\n */\n id: string;\n\n /**\n * Display label for the panel tab/button.\n */\n label: string;\n\n /**\n * Icon for the panel tab (string or SVG).\n */\n icon?: string;\n\n /**\n * Position of the panel.\n * @default 'right'\n */\n position?: 'left' | 'right';\n\n /**\n * Width of the panel when open.\n * @default '250px'\n */\n width?: string;\n }>(),\n {\n position: 'right',\n width: '250px',\n },\n);\n\n// Define slots with proper typing\ndefineSlots<{\n /** Tool panel content slot */\n default?: (props: ToolPanelContext) => VNode[];\n}>();\n\n// Template ref for the tool panel element\nconst panelRef = ref<HTMLElement | null>(null);\nconst slots = useSlots();\n\nonMounted(() => {\n const element = panelRef.value;\n if (!element || !slots.default) return;\n\n // Register the slot renderer\n toolPanelRegistry.set(element, (ctx: ToolPanelContext) => {\n return slots.default?.(ctx);\n });\n});\n</script>\n\n<template>\n <tbw-grid-tool-panel ref=\"panelRef\" :id=\"id\" :label=\"label\" :icon=\"icon\" :position=\"position\" :width=\"width\" />\n</template>\n","import type { DataGridElement } from '@toolbox-web/grid';\nimport { inject, onBeforeUnmount, onMounted, ref, type Ref } from 'vue';\nimport { GRID_ELEMENT_KEY } from './use-grid';\n\n/**\n * Grid event types and their payload types.\n */\nexport interface GridEventMap {\n 'cell-click': { value: unknown; row: unknown; column: unknown; rowIndex: number; colIndex: number };\n 'cell-dblclick': { value: unknown; row: unknown; column: unknown; rowIndex: number; colIndex: number };\n 'cell-commit': { value: unknown; oldValue: unknown; row: unknown; column: unknown };\n 'row-commit': { row: unknown; changes: Record<string, unknown> };\n 'selection-change': { selectedRows: unknown[]; selectedCells: unknown[] };\n 'sort-change': { field: string; direction: 'asc' | 'desc' | null };\n 'row-toggle': { row: unknown; expanded: boolean };\n ready: undefined;\n}\n\n/**\n * Composable for subscribing to grid events with automatic cleanup.\n *\n * @param eventName - The name of the grid event to listen for\n * @param handler - The event handler function\n * @param gridElement - Optional grid element ref (uses injected if not provided)\n *\n * @example\n * ```vue\n * <script setup>\n * import { useGridEvent } from '@toolbox-web/grid-vue';\n *\n * useGridEvent('cell-commit', (event) => {\n * console.log('Cell committed:', event.detail);\n * });\n *\n * useGridEvent('selection-change', (event) => {\n * console.log('Selection changed:', event.detail);\n * });\n * </script>\n * ```\n */\nexport function useGridEvent<K extends keyof GridEventMap>(\n eventName: K,\n handler: (event: CustomEvent<GridEventMap[K]>) => void,\n gridElement?: Ref<DataGridElement | null>,\n): void {\n const grid = gridElement ?? inject(GRID_ELEMENT_KEY, ref(null));\n let cleanup: (() => void) | null = null;\n\n onMounted(() => {\n const element = grid.value as unknown as HTMLElement | null;\n if (!element) return;\n\n const eventHandler = handler as EventListener;\n element.addEventListener(eventName, eventHandler);\n cleanup = () => element.removeEventListener(eventName, eventHandler);\n });\n\n onBeforeUnmount(() => {\n cleanup?.();\n });\n}\n","/**\n * Combined provider for type defaults and icons.\n *\n * Convenience component that combines GridTypeProvider and GridIconProvider.\n */\nimport type { GridIcons } from '@toolbox-web/grid';\nimport { defineComponent, h, type PropType, type VNode } from 'vue';\nimport { GridIconProvider } from './grid-icon-registry';\nimport { GridTypeProvider, type TypeDefaultsMap } from './grid-type-registry';\n\n/**\n * Combined provider for type defaults and icons.\n *\n * @example\n * ```vue\n * <script setup>\n * import { GridProvider, type TypeDefaultsMap } from '@toolbox-web/grid-vue';\n * import { h } from 'vue';\n *\n * const typeDefaults: TypeDefaultsMap = {\n * country: { renderer: (ctx) => h('span', ctx.value) },\n * };\n *\n * const icons = { sortAsc: '↑', sortDesc: '↓' };\n * </script>\n *\n * <template>\n * <GridProvider :typeDefaults=\"typeDefaults\" :icons=\"icons\">\n * <App />\n * </GridProvider>\n * </template>\n * ```\n */\nexport const GridProvider = defineComponent({\n name: 'GridProvider',\n props: {\n /**\n * Type defaults to provide to all descendant grids.\n */\n typeDefaults: {\n type: Object as PropType<TypeDefaultsMap>,\n default: undefined,\n },\n /**\n * Icon overrides to provide to all descendant grids.\n */\n icons: {\n type: Object as PropType<Partial<GridIcons>>,\n default: undefined,\n },\n },\n setup(props, { slots }) {\n return () => {\n let content: VNode[] | VNode | undefined = slots.default?.();\n\n // Wrap with type provider if typeDefaults is provided\n if (props.typeDefaults) {\n content = h(GridTypeProvider, { defaults: props.typeDefaults }, () => content);\n }\n\n // Wrap with icon provider if icons is provided\n if (props.icons) {\n content = h(GridIconProvider, { icons: props.icons }, () => content);\n }\n\n return content;\n };\n },\n});\n\nexport type GridProviderProps = InstanceType<typeof GridProvider>['$props'];\n"],"names":["GRID_ICONS","useGridIcons","inject","GridIconProvider","defineComponent","props","slots","provide","GRID_TYPE_DEFAULTS","useGridTypeDefaults","useTypeDefault","typeName","GridTypeProvider","GRID_ELEMENT_KEY","useGrid","gridElement","ref","pluginClass","detailRegistry","cardRegistry","columnRegistries","fieldRegistries","registerColumnRenderer","element","renderer","field","registry","fieldRegistry","registerColumnEditor","editor","getColumnRenderer","getColumnEditor","VueGridAdapter","hasRenderer","hasEditor","renderFn","cellCache","ctx","cellEl","cached","container","currentCtx","app","createApp","newCtx","editorFn","detailElement","detailEl","row","rowIndex","vnodes","cardElement","cardEl","adapterRegistered","globalAdapter","ensureAdapterRegistered","GridElement","__props","emit","__emit","gridRef","iconOverrides","FEATURE_PROPS","createFeaturePlugins","plugins","feature","propValue","plugin","createPluginFromFeature","mergedConfig","computed","baseConfig","featurePlugins","configPlugins","mergedPlugins","icons","handleCellCommit","event","handleRowCommit","handleCellClick","handleCellDblclick","handleSelectionChange","handleRowToggle","handleSortChange","handleReady","onMounted","grid","adapter","onBeforeUnmount","watch","newRows","newConfig","newFitMode","__expose","_createElementBlock","_renderSlot","_ctx","_useSlots","columnRef","hasCellSlot","hasEditorSlot","slotFn","h","slotContent","detailRef","useSlots","cardRef","toolPanelRegistry","panelRef","useGridEvent","eventName","handler","cleanup","eventHandler","GridProvider","content"],"mappings":"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"}
@@ -0,0 +1,98 @@
1
+ declare const _default: <TRow = unknown>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_expose?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
2
+ props: __VLS_PrettifyLocal<Pick<Partial<{
3
+ selection: any;
4
+ editing: boolean | "click" | "dblclick" | "manual";
5
+ clipboard: any;
6
+ contextMenu: any;
7
+ multiSort: any;
8
+ sorting: any;
9
+ filtering: any;
10
+ reorder: any;
11
+ visibility: any;
12
+ pinnedColumns: boolean;
13
+ groupingColumns: any;
14
+ columnVirtualization: any;
15
+ rowReorder: any;
16
+ groupingRows: GroupingRowsConfig;
17
+ pinnedRows: any;
18
+ tree: any;
19
+ masterDetail: MasterDetailConfig;
20
+ responsive: any;
21
+ undoRedo: any;
22
+ export: any;
23
+ print: any;
24
+ pivot: PivotConfig;
25
+ serverSide: ServerSideConfig;
26
+ rows: TRow[];
27
+ columns: ColumnConfig<TRow>[];
28
+ gridConfig: GridConfig<TRow>;
29
+ fitMode: FitMode;
30
+ }> & Omit<{
31
+ readonly rows: TRow[];
32
+ readonly selection?: any;
33
+ readonly editing?: boolean | "click" | "dblclick" | "manual" | undefined;
34
+ readonly clipboard?: any;
35
+ readonly contextMenu?: any;
36
+ readonly multiSort?: any;
37
+ readonly sorting?: any;
38
+ readonly filtering?: any;
39
+ readonly reorder?: any;
40
+ readonly visibility?: any;
41
+ readonly pinnedColumns?: boolean | undefined;
42
+ readonly groupingColumns?: any;
43
+ readonly columnVirtualization?: any;
44
+ readonly rowReorder?: any;
45
+ readonly groupingRows?: any;
46
+ readonly pinnedRows?: any;
47
+ readonly tree?: any;
48
+ readonly masterDetail?: any;
49
+ readonly responsive?: any;
50
+ readonly undoRedo?: any;
51
+ readonly export?: any;
52
+ readonly print?: any;
53
+ readonly pivot?: any;
54
+ readonly serverSide?: any;
55
+ readonly columns?: ColumnConfig<TRow>[] | undefined;
56
+ readonly gridConfig?: any;
57
+ readonly fitMode?: any;
58
+ readonly "onCell-commit"?: ((event: CustomEvent<any>) => any) | undefined;
59
+ readonly "onRow-commit"?: ((event: CustomEvent<any>) => any) | undefined;
60
+ readonly "onCell-click"?: ((event: CustomEvent<any>) => any) | undefined;
61
+ readonly "onCell-dblclick"?: ((event: CustomEvent<any>) => any) | undefined;
62
+ readonly "onSelection-change"?: ((event: CustomEvent<any>) => any) | undefined;
63
+ readonly "onRow-toggle"?: ((event: CustomEvent<any>) => any) | undefined;
64
+ readonly "onSort-change"?: ((event: CustomEvent<any>) => any) | undefined;
65
+ readonly onReady?: ((event: CustomEvent<any>) => any) | undefined;
66
+ } & import('vue').VNodeProps & import('vue').AllowedComponentProps & import('vue').ComponentCustomProps, "selection" | "editing" | "clipboard" | "contextMenu" | "multiSort" | "sorting" | "filtering" | "reorder" | "visibility" | "pinnedColumns" | "groupingColumns" | "columnVirtualization" | "rowReorder" | "groupingRows" | "pinnedRows" | "tree" | "masterDetail" | "responsive" | "undoRedo" | "export" | "print" | "pivot" | "serverSide" | "rows" | "columns" | "gridConfig" | "fitMode">, "onCell-commit" | "onRow-commit" | "onCell-click" | "onCell-dblclick" | "onSelection-change" | "onRow-toggle" | "onSort-change" | "onReady" | ("selection" | "editing" | "clipboard" | "contextMenu" | "multiSort" | "sorting" | "filtering" | "reorder" | "visibility" | "pinnedColumns" | "groupingColumns" | "columnVirtualization" | "rowReorder" | "groupingRows" | "pinnedRows" | "tree" | "masterDetail" | "responsive" | "undoRedo" | "export" | "print" | "pivot" | "serverSide" | "rows" | "columns" | "gridConfig" | "fitMode")> & {} & Partial<{}>> & import('vue').PublicProps;
67
+ expose(exposed: import('vue').ShallowUnwrapRef<{
68
+ /** The underlying grid element */
69
+ gridElement: any;
70
+ /** Force a layout recalculation */
71
+ forceLayout: () => any;
72
+ /** Get current grid configuration */
73
+ getConfig: () => any;
74
+ /** Wait for grid to be ready */
75
+ ready: () => any;
76
+ }>): void;
77
+ attrs: any;
78
+ slots: {
79
+ default?(_: {}): any;
80
+ };
81
+ emit: {
82
+ (e: "cell-commit", event: CustomEvent): void;
83
+ (e: "row-commit", event: CustomEvent): void;
84
+ (e: "cell-click", event: CustomEvent): void;
85
+ (e: "cell-dblclick", event: CustomEvent): void;
86
+ (e: "selection-change", event: CustomEvent): void;
87
+ (e: "row-toggle", event: CustomEvent): void;
88
+ (e: "sort-change", event: CustomEvent): void;
89
+ (e: "ready", event: CustomEvent): void;
90
+ };
91
+ }>) => import('vue').VNode & {
92
+ __ctx?: Awaited<typeof __VLS_setup>;
93
+ };
94
+ export default _default;
95
+ type __VLS_PrettifyLocal<T> = {
96
+ [K in keyof T]: T[K];
97
+ } & {};
98
+ //# sourceMappingURL=TbwGrid.vue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TbwGrid.vue.d.ts","sourceRoot":"","sources":["../../../../libs/grid-vue/src/lib/TbwGrid.vue"],"names":[],"mappings":"yBA2ciB,IAAI,GAAG,OAAO,EAC9B,aAAa,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,EAC9D,YAAY,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC,EAC3G,eAAe,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,EACjE;WAsuBO,mBAAmB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wgCAAkE,CAAC,4BAA2B;oBACzG,OAAO,KAAK,EAAE,gBAAgB;QA3W7C,kCAAkC;;QAElC,mCAAmC;;QAEnC,qCAAqC;;QAErC,gCAAgC;;MAqWmC,GAAG,IAAI;WACpE,GAAG;;yBA3KkB,GAAG;;;YAlZ1B,aAAa,SAAS,WAAW,GAAG,IAAI;YAExC,YAAY,SAAS,WAAW,GAAG,IAAI;YAEvC,YAAY,SAAS,WAAW,GAAG,IAAI;YAEvC,eAAe,SAAS,WAAW,GAAG,IAAI;YAE1C,kBAAkB,SAAS,WAAW,GAAG,IAAI;YAE7C,YAAY,SAAS,WAAW,GAAG,IAAI;YAEvC,aAAa,SAAS,WAAW,GAAG,IAAI;YAExC,OAAO,SAAS,WAAW,GAAG,IAAI;;EAmjBpC,KACQ,OAAO,KAAK,EAAE,KAAK,GAAG;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC,OAAO,WAAW,CAAC,CAAA;CAAE;AAjvBzE,wBAivB4E;AAC5E,KAAK,mBAAmB,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAG,GAAG,EAAE,CAAC"}
@@ -0,0 +1,183 @@
1
+ import { VNode } from 'vue';
2
+ import { CellSlotProps, EditorSlotProps } from './slot-types';
3
+ /**
4
+ * Props for TbwGridColumn
5
+ */
6
+ type __VLS_Props = {
7
+ /** Field path in the row object */
8
+ field: string;
9
+ /** Column header text */
10
+ header?: string;
11
+ /** Column width */
12
+ width?: string | number;
13
+ /** Minimum column width */
14
+ minWidth?: string | number;
15
+ /** Maximum column width */
16
+ maxWidth?: string | number;
17
+ /** Whether the column is sortable */
18
+ sortable?: boolean;
19
+ /** Whether the column is resizable */
20
+ resizable?: boolean;
21
+ /** Whether the column is editable */
22
+ editable?: boolean;
23
+ /** Data type for the column */
24
+ type?: string;
25
+ /** Column alignment */
26
+ align?: 'left' | 'center' | 'right';
27
+ /** Whether the column is hidden */
28
+ hidden?: boolean;
29
+ };
30
+ declare const slots: Readonly<{
31
+ /** Custom cell renderer slot */
32
+ cell?: (props: CellSlotProps) => VNode[];
33
+ /** Custom cell editor slot */
34
+ editor?: (props: EditorSlotProps) => VNode[];
35
+ }> & {
36
+ /** Custom cell renderer slot */
37
+ cell?: (props: CellSlotProps) => VNode[];
38
+ /** Custom cell editor slot */
39
+ editor?: (props: EditorSlotProps) => VNode[];
40
+ };
41
+ declare const columnRef: import('vue').Ref<HTMLElement | null, HTMLElement | null>;
42
+ declare function __VLS_template(): {
43
+ attrs: Partial<{}>;
44
+ slots: Readonly<{
45
+ /** Custom cell renderer slot */
46
+ cell?: (props: CellSlotProps) => VNode[];
47
+ /** Custom cell editor slot */
48
+ editor?: (props: EditorSlotProps) => VNode[];
49
+ }> & {
50
+ /** Custom cell renderer slot */
51
+ cell?: (props: CellSlotProps) => VNode[];
52
+ /** Custom cell editor slot */
53
+ editor?: (props: EditorSlotProps) => VNode[];
54
+ };
55
+ refs: {
56
+ columnRef: ({
57
+ $: import('vue').ComponentInternalInstance;
58
+ $data: {};
59
+ $props: {
60
+ readonly field: string;
61
+ readonly header?: string | undefined;
62
+ readonly width?: string | number | undefined;
63
+ readonly minWidth?: string | number | undefined;
64
+ readonly maxWidth?: string | number | undefined;
65
+ readonly sortable?: boolean | undefined;
66
+ readonly resizable?: boolean | undefined;
67
+ readonly editable?: boolean | undefined;
68
+ readonly type?: string | undefined;
69
+ readonly align?: "left" | "center" | "right" | undefined;
70
+ readonly hidden?: boolean | undefined;
71
+ } & import('vue').VNodeProps & import('vue').AllowedComponentProps & import('vue').ComponentCustomProps;
72
+ $attrs: {
73
+ [x: string]: unknown;
74
+ };
75
+ $refs: {
76
+ [x: string]: unknown;
77
+ };
78
+ $slots: Readonly<{
79
+ [name: string]: import('vue').Slot<any> | undefined;
80
+ }>;
81
+ $root: import('vue').ComponentPublicInstance | null;
82
+ $parent: import('vue').ComponentPublicInstance | null;
83
+ $host: Element | null;
84
+ $emit: (event: string, ...args: any[]) => void;
85
+ $el: any;
86
+ $options: import('vue').ComponentOptionsBase<Readonly<__VLS_Props> & Readonly<{}>, {
87
+ columnRef: typeof columnRef;
88
+ }, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, {}, {}, string, {}, import('vue').GlobalComponents, import('vue').GlobalDirectives, string, import('vue').ComponentProvideOptions> & {
89
+ beforeCreate?: (() => void) | (() => void)[];
90
+ created?: (() => void) | (() => void)[];
91
+ beforeMount?: (() => void) | (() => void)[];
92
+ mounted?: (() => void) | (() => void)[];
93
+ beforeUpdate?: (() => void) | (() => void)[];
94
+ updated?: (() => void) | (() => void)[];
95
+ activated?: (() => void) | (() => void)[];
96
+ deactivated?: (() => void) | (() => void)[];
97
+ beforeDestroy?: (() => void) | (() => void)[];
98
+ beforeUnmount?: (() => void) | (() => void)[];
99
+ destroyed?: (() => void) | (() => void)[];
100
+ unmounted?: (() => void) | (() => void)[];
101
+ renderTracked?: ((e: import('vue').DebuggerEvent) => void) | ((e: import('vue').DebuggerEvent) => void)[];
102
+ renderTriggered?: ((e: import('vue').DebuggerEvent) => void) | ((e: import('vue').DebuggerEvent) => void)[];
103
+ errorCaptured?: ((err: unknown, instance: import('vue').ComponentPublicInstance | null, info: string) => boolean | void) | ((err: unknown, instance: import('vue').ComponentPublicInstance | null, info: string) => boolean | void)[];
104
+ };
105
+ $forceUpdate: () => void;
106
+ $nextTick: typeof import('vue').nextTick;
107
+ $watch<T extends string | ((...args: any) => any)>(source: T, cb: T extends (...args: any) => infer R ? (...args: [R, R, import('@vue/reactivity').OnCleanup]) => any : (...args: [any, any, import('@vue/reactivity').OnCleanup]) => any, options?: import('vue').WatchOptions): import('vue').WatchStopHandle;
108
+ } & Readonly<{}> & Omit<Readonly<__VLS_Props> & Readonly<{}>, "columnRef"> & import('vue').ShallowUnwrapRef<{
109
+ columnRef: typeof columnRef;
110
+ }> & {} & import('vue').ComponentCustomProperties & {} & {
111
+ $slots: typeof slots;
112
+ }) | null;
113
+ };
114
+ rootEl: any;
115
+ };
116
+ type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
117
+ 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, {
118
+ columnRef: ({
119
+ $: import('vue').ComponentInternalInstance;
120
+ $data: {};
121
+ $props: {
122
+ readonly field: string;
123
+ readonly header?: string | undefined;
124
+ readonly width?: string | number | undefined;
125
+ readonly minWidth?: string | number | undefined;
126
+ readonly maxWidth?: string | number | undefined;
127
+ readonly sortable?: boolean | undefined;
128
+ readonly resizable?: boolean | undefined;
129
+ readonly editable?: boolean | undefined;
130
+ readonly type?: string | undefined;
131
+ readonly align?: "left" | "center" | "right" | undefined;
132
+ readonly hidden?: boolean | undefined;
133
+ } & import('vue').VNodeProps & import('vue').AllowedComponentProps & import('vue').ComponentCustomProps;
134
+ $attrs: {
135
+ [x: string]: unknown;
136
+ };
137
+ $refs: {
138
+ [x: string]: unknown;
139
+ };
140
+ $slots: Readonly<{
141
+ [name: string]: import('vue').Slot<any> | undefined;
142
+ }>;
143
+ $root: import('vue').ComponentPublicInstance | null;
144
+ $parent: import('vue').ComponentPublicInstance | null;
145
+ $host: Element | null;
146
+ $emit: (event: string, ...args: any[]) => void;
147
+ $el: any;
148
+ $options: import('vue').ComponentOptionsBase<Readonly<__VLS_Props> & Readonly<{}>, {
149
+ columnRef: typeof columnRef;
150
+ }, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, {}, {}, string, {}, import('vue').GlobalComponents, import('vue').GlobalDirectives, string, import('vue').ComponentProvideOptions> & {
151
+ beforeCreate?: (() => void) | (() => void)[];
152
+ created?: (() => void) | (() => void)[];
153
+ beforeMount?: (() => void) | (() => void)[];
154
+ mounted?: (() => void) | (() => void)[];
155
+ beforeUpdate?: (() => void) | (() => void)[];
156
+ updated?: (() => void) | (() => void)[];
157
+ activated?: (() => void) | (() => void)[];
158
+ deactivated?: (() => void) | (() => void)[];
159
+ beforeDestroy?: (() => void) | (() => void)[];
160
+ beforeUnmount?: (() => void) | (() => void)[];
161
+ destroyed?: (() => void) | (() => void)[];
162
+ unmounted?: (() => void) | (() => void)[];
163
+ renderTracked?: ((e: import('vue').DebuggerEvent) => void) | ((e: import('vue').DebuggerEvent) => void)[];
164
+ renderTriggered?: ((e: import('vue').DebuggerEvent) => void) | ((e: import('vue').DebuggerEvent) => void)[];
165
+ errorCaptured?: ((err: unknown, instance: import('vue').ComponentPublicInstance | null, info: string) => boolean | void) | ((err: unknown, instance: import('vue').ComponentPublicInstance | null, info: string) => boolean | void)[];
166
+ };
167
+ $forceUpdate: () => void;
168
+ $nextTick: typeof import('vue').nextTick;
169
+ $watch<T extends string | ((...args: any) => any)>(source: T, cb: T extends (...args: any) => infer R ? (...args: [R, R, import('@vue/reactivity').OnCleanup]) => any : (...args: [any, any, import('@vue/reactivity').OnCleanup]) => any, options?: import('vue').WatchOptions): import('vue').WatchStopHandle;
170
+ } & Readonly<{}> & Omit<Readonly<__VLS_Props> & Readonly<{}>, "columnRef"> & import('vue').ShallowUnwrapRef<{
171
+ columnRef: typeof columnRef;
172
+ }> & {} & import('vue').ComponentCustomProperties & {} & {
173
+ $slots: typeof slots;
174
+ }) | null;
175
+ }, any>;
176
+ declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
177
+ export default _default;
178
+ type __VLS_WithTemplateSlots<T, S> = T & {
179
+ new (): {
180
+ $slots: S;
181
+ };
182
+ };
183
+ //# sourceMappingURL=TbwGridColumn.vue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TbwGridColumn.vue.d.ts","sourceRoot":"","sources":["../../../../libs/grid-vue/src/lib/TbwGridColumn.vue"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import { VNode } from 'vue';
2
+ import { DetailPanelContext } from './detail-panel-registry';
3
+ declare const _default: <TRow = unknown>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_expose?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
4
+ props: __VLS_PrettifyLocal<Pick<Partial<{}> & Omit<{} & import('vue').VNodeProps & import('vue').AllowedComponentProps & import('vue').ComponentCustomProps, never>, never> & {
5
+ /**
6
+ * Whether to show the expand/collapse column.
7
+ * @default true
8
+ */
9
+ showExpandColumn?: boolean;
10
+ /**
11
+ * Animation style for expand/collapse.
12
+ * - 'slide': Smooth height animation (default)
13
+ * - 'fade': Opacity transition
14
+ * - false: No animation
15
+ * @default 'slide'
16
+ */
17
+ animation?: "slide" | "fade" | false;
18
+ } & Partial<{}>> & import('vue').PublicProps;
19
+ expose(exposed: import('vue').ShallowUnwrapRef<{}>): void;
20
+ attrs: any;
21
+ slots: Readonly<{
22
+ /** Detail panel content slot */
23
+ default?: (props: DetailPanelContext<TRow>) => VNode[];
24
+ }> & {
25
+ /** Detail panel content slot */
26
+ default?: (props: DetailPanelContext<TRow>) => VNode[];
27
+ };
28
+ emit: {};
29
+ }>) => import('vue').VNode & {
30
+ __ctx?: Awaited<typeof __VLS_setup>;
31
+ };
32
+ export default _default;
33
+ type __VLS_PrettifyLocal<T> = {
34
+ [K in keyof T]: T[K];
35
+ } & {};
36
+ //# sourceMappingURL=TbwGridDetailPanel.vue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TbwGridDetailPanel.vue.d.ts","sourceRoot":"","sources":["../../../../libs/grid-vue/src/lib/TbwGridDetailPanel.vue"],"names":[],"mappings":"AAwDA,OAAO,EAA4B,KAAK,KAAK,EAAE,MAAM,KAAK,CAAC;AAC3D,OAAO,EAAkB,KAAK,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;yBAEjE,IAAI,GAAG,OAAO,EAC9B,aAAa,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,EAC9D,YAAY,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC,EAC3G,eAAe,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,EACjE;WA4GO,mBAAmB,CAAC;QAvGxB;;;WAGG;2BACgB,OAAO;QAE1B;;;;;;WAMG;oBACS,OAAO,GAAG,MAAM,GAAG,KAAK;mBA0FsD,CAAC,4BAA2B;oBACzG,OAAO,KAAK,EAAE,gBAAgB,CAAC,EAAE,CAAC,GAAG,IAAI;WAClD,GAAG;;QAhFT,gCAAgC;kBACtB,CAAC,KAAK,EAAE,kBAAkB,CAAC,IAAI,CAAC,KAAK,KAAK,EAAE;;QADtD,gCAAgC;kBACtB,CAAC,KAAK,EAAE,kBAAkB,CAAC,IAAI,CAAC,KAAK,KAAK,EAAE;;UAiFjD,EAAE;EAEL,KACQ,OAAO,KAAK,EAAE,KAAK,GAAG;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC,OAAO,WAAW,CAAC,CAAA;CAAE;AAvHzE,wBAuH4E;AAC5E,KAAK,mBAAmB,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAG,GAAG,EAAE,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { VNode } from 'vue';
2
+ import { ResponsiveCardContext } from './responsive-card-registry';
3
+ declare const _default: <TRow = unknown>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_expose?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
4
+ props: __VLS_PrettifyLocal<Pick<Partial<{}> & Omit<{} & import('vue').VNodeProps & import('vue').AllowedComponentProps & import('vue').ComponentCustomProps, never>, never> & {} & Partial<{}>> & import('vue').PublicProps;
5
+ expose(exposed: import('vue').ShallowUnwrapRef<{}>): void;
6
+ attrs: any;
7
+ slots: Readonly<{
8
+ /** Card content slot */
9
+ default?: (props: ResponsiveCardContext<TRow>) => VNode[];
10
+ }> & {
11
+ /** Card content slot */
12
+ default?: (props: ResponsiveCardContext<TRow>) => VNode[];
13
+ };
14
+ emit: {};
15
+ }>) => import('vue').VNode & {
16
+ __ctx?: Awaited<typeof __VLS_setup>;
17
+ };
18
+ export default _default;
19
+ type __VLS_PrettifyLocal<T> = {
20
+ [K in keyof T]: T[K];
21
+ } & {};
22
+ //# sourceMappingURL=TbwGridResponsiveCard.vue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TbwGridResponsiveCard.vue.d.ts","sourceRoot":"","sources":["../../../../libs/grid-vue/src/lib/TbwGridResponsiveCard.vue"],"names":[],"mappings":"AAqCA,OAAO,EAA4B,KAAK,KAAK,EAAE,MAAM,KAAK,CAAC;AAC3D,OAAO,EAAgB,KAAK,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;yBAErE,IAAI,GAAG,OAAO,EAC9B,aAAa,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,EAC9D,YAAY,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC,EAC3G,eAAe,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,EACjE;WAgFO,mBAAmB,CAAC,mKAAkE,CAAC,4BAA2B;oBACzG,OAAO,KAAK,EAAE,gBAAgB,CAAC,EAAE,CAAC,GAAG,IAAI;WAClD,GAAG;;QAvET,wBAAwB;kBACd,CAAC,KAAK,EAAE,qBAAqB,CAAC,IAAI,CAAC,KAAK,KAAK,EAAE;;QADzD,wBAAwB;kBACd,CAAC,KAAK,EAAE,qBAAqB,CAAC,IAAI,CAAC,KAAK,KAAK,EAAE;;UAwEpD,EAAE;EAEL,KACQ,OAAO,KAAK,EAAE,KAAK,GAAG;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC,OAAO,WAAW,CAAC,CAAA;CAAE;AA3FzE,wBA2F4E;AAC5E,KAAK,mBAAmB,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAG,GAAG,EAAE,CAAC"}
@@ -0,0 +1,27 @@
1
+ import { VNode } from 'vue';
2
+ /**
3
+ * Props for TbwGridToolButtons
4
+ */
5
+ type __VLS_Props = {};
6
+ declare function __VLS_template(): {
7
+ attrs: Partial<{}>;
8
+ slots: Readonly<{
9
+ /** Tool button content slot */
10
+ default?: () => VNode[];
11
+ }> & {
12
+ /** Tool button content slot */
13
+ default?: () => VNode[];
14
+ };
15
+ refs: {};
16
+ rootEl: any;
17
+ };
18
+ type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
19
+ 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>;
20
+ declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
21
+ export default _default;
22
+ type __VLS_WithTemplateSlots<T, S> = T & {
23
+ new (): {
24
+ $slots: S;
25
+ };
26
+ };
27
+ //# sourceMappingURL=TbwGridToolButtons.vue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TbwGridToolButtons.vue.d.ts","sourceRoot":"","sources":["../../../../libs/grid-vue/src/lib/TbwGridToolButtons.vue"],"names":[],"mappings":"AAwBA,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,KAAK,CAAC;AAEjC;;GAEG;AACH,KAAK,WAAW,GAAG,EAElB,CAAC;AAWF,iBAAS,cAAc;WA2BT,OAAO,IAA6B;;QAjChD,+BAA+B;kBACrB,MAAM,KAAK,EAAE;;QADvB,+BAA+B;kBACrB,MAAM,KAAK,EAAE;;;;EAqCxB;AAQD,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAC9D,QAAA,MAAM,eAAe,kSAOnB,CAAC;wBACkB,uBAAuB,CAAC,OAAO,eAAe,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAAnG,wBAAoG;AAQpG,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IACxC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}